0

首先要做的事情是:我很清楚使用 Regex 解析 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 回答