编辑使用RegEx作为纯文本访问的Xml InnerText?

时间:2013-09-11 10:28:03

标签: c# .net xml regex html-agility-pack

我有以下假假样本:

<family>
   <member> dad </member>
   <member> mum </member>
   <member> son </member>
   <member> grandad<> </member>
</family>

我已经获得了一个转换为XML的文档,但到目前为止我还没有成功。我无法控制如何创建给我的文档(html),但我需要将文档转换为xml;这样我就可以使用样式表来转换它。

TidyManaged和HAP在我的工作流程中对我 并不好。如果人们有兴趣了解原因,将会解释更多。

为了让我成功使用HAP,我需要上面的示例如下所示:

<family>
   <member> dad </member>
   <member> mum </member>
   <member> son </member>
   <member> grandad&lt;&gt; </member>
</family>

在我放弃这个问题之前,我的最后一个方法是,在我的源代码html文档中读取,将其视为计划文本文档并逐行阅读。

我要求某人给我一些正确的正则表达式,它将成功匹配元素的内部文本,即:

<member> grandad<> </member>

会给我字符串:

"grandad<>"

如果我能做到这一点,我应该能够将尖括号转换为html密钥代码等价物。然后,这应该作为有效的XML传递,允许我将其加载到XDocument类中。

然后用这个结果字符串替换该结果字符串:

<member> grandad&lt;&gt; </member>

如果所有特殊字符都已正确“转义”,那么我将能够利用HTML Agility Pack(HAP)的优势,否则我将不得不放弃。

感谢阅读。

2 个答案:

答案 0 :(得分:1)

最简单的正则表达式

var reg = new Regex(@"(?<=<(\w+)>)(.*)(?=</\1>)");
var input = "<member> grandad<Regexp is a bad tool because of <strong>this</strong>> </member>";
var output = reg.Match(input).Value;

如果您的member标记包含任何空格或属性或多个member标记将在单行中,则会出现问题。因此,如果你能提供最丑陋的例子,我会改变表达式来调整你的输入。

答案 1 :(得分:-1)

如果您可以手动处理每个文档,那么您可以使用notepad ++。

reindent xml(TextFX-&gt; TextFX HTML工具 - &gt; Reindent xml&gt;功能会自动强加您想要的实体。