-1

我正在使用 c# 处理 XML 文档。

<data>
    <single>
        <p xmlns="http://www.w3.org/1999/xhtml">
            <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong>
        </p>
        <p xmlns="http://www.w3.org/1999/xhtml">
            <strong>dmcdnsbcdbn</strong>
        </p>
    </single>
    <single>
        <div xmlns="http://www.w3.org/1999/xhtml">
            <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong>
        </div>
        <span xmlns="http://www.w3.org/1999/xhtml">
            <strong>dmcdnsbcdbn</strong>
        </span>
    </single>
</data>

我想删除所有<p>,<div><span>标签。

需要的输出:

<data>
    <single>
        <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong>
        <strong>dmcdnsbcdbn</strong>
    </single>
    <single>
        <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong>
        <strong>dmcdnsbcdbn</strong>
    </single>
</data>

任何人都可以建议如何使用 C# 来做到这一点。使用 XmlDocument。

4

2 回答 2

1

使用HtmlAgilityPack,可以这样做:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(xml);

doc.DocumentNode
    .Descendants("strong")
    .ToList().ForEach(n => n.ParentNode.ParentNode.RemoveChild(n.ParentNode, true));

var newXml = doc.DocumentNode.InnerHtml;
于 2012-05-21T14:09:16.437 回答
0

这是一个相当简单的正则表达式。

string tmp = xmlDoc.DocumentElement.InnerXml;

tmp = Regex.Replace(tmp, "<p.*>|</p>|<div.*>|</div>|<span.*>|</span>", "");

XmlDocument newDoc = new XmlDocument();
newDoc.LoadXml(tmp);

这将保留数据(标签之间的所有内容),但会删除标签本身。注意:这可能会弄乱文档中的某些格式(大量空格),但它应该仍然可用。

在您给出的示例上运行此语句后,这是输出。

<data>
    <single>

            <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong>


            <strong>dmcdnsbcdbn</strong>

    </single>
    <single>

            <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong>


            <strong>dmcdnsbcdbn</strong>

    </single>
</data>

我不确定您是否喜欢,您可能想要在尝试加载之前在字符串上运行 .Trim(),甚至是旨在删除标签之间所有空格的辅助正则表达式。

正则表达式模式将是

Regex.Replace(string, "(>) *(<)", "$1$2");

或者您可以使用“.*”而不是“*”来确保替换标签之间可能剩余的所有换行符或其他特殊字符

于 2012-05-21T15:42:42.743 回答