使用Regex或HtmlAgilityPack替换XML String

时间:2013-10-10 15:21:33

标签: c# regex

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

1 个答案:

答案 0 :(得分:1)

在Regex测试仪中,这对我有用。注意使用SingleLine,它使(。)匹配每个字符,包括换行符。

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

enter image description here