-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 を、文字列をロードする前に実行することをお勧めします。

そのための正規表現パターンは次のようになります

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

または、「*」の代わりに「.*」を使用して、タグ間に残っている可能性のあるすべての改行またはその他の特殊文字を確実に置き換えることができます

于 2012-05-21T15:42:42.743 に答える