我有以下假假样本:
<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<> </member>
</family>
在我放弃这个问题之前,我的最后一个方法是,在我的源代码html文档中读取,将其视为计划文本文档并逐行阅读。
我要求某人给我一些正确的正则表达式,它将成功匹配元素的内部文本,即:
<member> grandad<> </member>
会给我字符串:
"grandad<>"
如果我能做到这一点,我应该能够将尖括号转换为html密钥代码等价物。然后,这应该作为有效的XML传递,允许我将其加载到XDocument类中。
然后用这个结果字符串替换该结果字符串:
<member> grandad<> </member>
如果所有特殊字符都已正确“转义”,那么我将能够利用HTML Agility Pack(HAP)的优势,否则我将不得不放弃。
感谢阅读。
答案 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;功能会自动强加您想要的实体。