我有一个包含相当多XML的字符串,它实际上是描述一个Word文档(document.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>", " ");
这不起作用,当我这样做时字符串没有改变。我做错了什么?任何建议将不胜感激,非常感谢!
xmlBody = xmlBody.Replace("<w:t>References</w:t>", "");
Replace 函数不会改变源字符串;它返回一个包含所做更改的新字符串。事实上,C# 字符串是无法更改的。如果您查看文档,它说它们是不可变的。
在 C# 中,字符串是不可变的 - 一旦创建,就无法更改。
Replace
返回字符串的新实例。因此,你需要捕获它的返回值:
xmlBody = xmlBody.Replace("<w:t>References</w:t>", " ");
顺便说一句,使用正则表达式解析基于 XML 的字符串并不被认为是一个好的做法,因为它太脆弱了。考虑使用
XDocument
或类似的工具来删除您想要的元素。
string.replace 返回一个新字符串,它不会改变原始字符串
尝试
xmlBody = xmlBody.Replace("<w:t>References</w:t>", " ");
Replace 不是内联替换...它返回一个进行替换的新字符串。
用空字符串替换
xmlBody = Regex.Replace(xmlBody,
@"<w:t>[\s\S]*?</w:t>",
"<w:t></w:t>")