首先要做的事情是:我很清楚使用 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 格式太不正确,无法与大多数解析器一起使用。