0

まず最初に、正規表現を使用して XML を解析するのはよくない考えであることは十分承知しています。とはいえ、この XML は形式が正しくないため、XML パーサーを使用すると (せいぜい) 出力が大幅に変更され、それを使用するエンジンに対して出力が無効になります。これは第三者によって定義された独自の仕様であり、私はそれを制御できません。

範囲が限られているため、ここでは Regex/XML の典型的な落とし穴が問題にならないことを考えると、正規表現を定義して以下をキャプチャするにはどうすればよいでしょうか。

<ns:elementname attr="value">
  arbitrary data/child nodes here
</ns:elementname>

私はもう試した:

var tOut5 = Regex.Replace(entry, 
@"<ns:elementname(.*?)ns:elementname>", 
"", RegexOptions.Multiline);

他のいくつかのバリアントと同様に。

私が試したHTMLAgilityPackで:

var doc = new HtmlDocument();
doc.OptionWriteEmptyNodes = true;
doc.LoadHtml(text);
var Elements = doc.DocumentNode.Descendants()
.Where(n => n.Name == "ns:elementname");

これはノードの選択には機能しますが、出力を保存すると、他のノードが副産物としてレンダリングされる方法に影響します。

他の提案も受け付けていますが、ドキュメント全体で変更できるのはこのノードだけであり、XML の形式が正しくないため、ほとんどのパーサーで使用できないことに注意してください。

4

1 に答える 1

1

正規表現テスターでは、これでうまくいきました。(.) を改行を含むすべての文字に一致させる SingleLine の使用に注意してください。

<ns:elementname(.+?)>.+?</ns:elementname>

ここに画像の説明を入力

于 2013-10-10T15:40:27.957 に答える