2012-08-08 62 views
1

我有一个字符串,其中包含一个公平的XML位,它实际上是描述一个word文档(document.xml)的xml。我想简单地用一个空字符串替换一部分字符串,从字符串中有效地删除它。这听起来很直接,但我没有得到我期望的结果。在xml中简单的字符串替换

下面是一些XML的样子,这只是第10行:

<w:body xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> 
    <w:p w:rsidR="00CB3A3E" w:rsidP="00257CF7" w:rsidRDefault="008C1E91"> 
     <w:pPr> 
      <w:pStyle w:val="Heading-Title" /> 
     </w:pPr> 
     <w:r> 
      <w:t>References</w:t> 
     </w:r> 
    </w:p> 
    <w:sdt> 

正如我所说的,这是一个字符串。我只是尝试用空字符串替换<w:t>References</w:t>。我这样做:

//xmlBody is the string that is holding the xml 
xmlBody.Replace("<w:t>References</w:t>", " "); 

这是行不通的,当我这样做时字符串是不变的。我究竟做错了什么?任何意见将不胜感激,非常感谢!

+1

请尝试使用正确的XML对象来操作XML。首先,您不会以这种方式生成invalud XML,其次,您会发现可能位于文本或类似文本的分隔线上,从而避免询问“如何使用正则表达式解析/搜索XML”。 – 2012-08-08 19:34:53

回答

3
xmlBody = xmlBody.Replace("<w:t>References</w:t>", ""); 

Replace函数不会更改源字符串;它会返回一个新的字符串,并进行更改。事实上,C#字符串不能更改。如果你看看documentation,它说它们是不可变的。

2

与string.replace返回一个新字符串,它不会改变原始字符串

尝试

xmlBody = xmlBody.Replace("<w:t>References</w:t>", " "); 
1

更换不是一个内联替换......它返回一个新字符串替换制作。

3

在C#中,字符串是不可变的 - 一旦创建,它不能被改变。 Replace返回一个新的字符串实例。因此,你需要捕捉它的返回值:

xmlBody = xmlBody.Replace("<w:t>References</w:t>", " "); 

一点题外话,它不被视为一个很好的做法来解析正则表达式的基于XML的字符串,因为它太脆弱。考虑使用XDocument或其他一些来移除你之后的元素。