xml 中的简单字符串替换

问题描述 投票:0回答:5

我有一个包含相当多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>", " ");

这不起作用,当我这样做时字符串没有改变。我做错了什么?任何建议将不胜感激,非常感谢!

c# .net
5个回答
3
投票
xmlBody = xmlBody.Replace("<w:t>References</w:t>", "");

Replace 函数不会改变源字符串;它返回一个包含所做更改的新字符串。事实上,C# 字符串是无法更改的。如果您查看文档,它说它们是不可变的。


3
投票

在 C# 中,字符串是不可变的 - 一旦创建,就无法更改。

Replace
返回字符串的新实例。因此,你需要捕获它的返回值:

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

顺便说一句,使用正则表达式解析基于 XML 的字符串并不被认为是一个好的做法,因为它太脆弱了。考虑使用

XDocument
或类似的工具来删除您想要的元素。


2
投票

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

尝试

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

1
投票

Replace 不是内联替换...它返回一个进行替换的新字符串。


0
投票

用空字符串替换 标签之间的所有内容:

xmlBody = Regex.Replace(xmlBody,
                        @"<w:t>[\s\S]*?</w:t>",
                        "<w:t></w:t>")
© www.soinside.com 2019 - 2024. All rights reserved.