C# 解析XML数据

C# 解析XML数据,c#,xml,regex,parsing,C#,Xml,Regex,Parsing,是的,我真的想问一下用正则表达式解析XML。。。来吧 我有一些XML-ish数据,需要对其进行解析。我不能完全使用XMLDocument或类似的文档,因为它不是正确的XML,而且我不确定是否可以(或希望)更改格式。主要问题是具有特殊含义的标签,如下所示: <$ something_here $> C#的XmlDocument无法解析,我想其他方法也会。我可以,通过大量的工作,将上面的内容更改为 <some_special_tag><![CDATA[ somet

是的,我真的想问一下用正则表达式解析XML。。。来吧

我有一些XML-ish数据,需要对其进行解析。我不能完全使用XMLDocument或类似的文档,因为它不是正确的XML,而且我不确定是否可以(或希望)更改格式。主要问题是具有特殊含义的标签,如下所示:

<$ something_here $>

C#的XmlDocument无法解析,我想其他方法也会。我可以,通过大量的工作,将上面的内容更改为

<some_special_tag><![CDATA[ something_here ]]></some_special_tag>

但那很难看,我真的不想。更改会很费时的原因是我有数百个,也许数千个XML文档需要更改

目前,我正在用正则表达式解析文档。我只需要选择几个特定的标签(不是上面的标签),它似乎可以工作,但我对它感到不舒服。我现在正在做这样的事情:

...

MatchCollection mc = Regex.Matches(Template, "<tagname.*?/tagname>"); // or similar
foreach (Match m in mc) {

    try {

        XmlDocument xd = new XmlDocument();
        xd.LoadXml(m.Value);

...
。。。
MatchCollection mc=Regex.Matches(模板“”);//或类似
foreach(在mc中匹配m){
试一试{
XmlDocument xd=新的XmlDocument();
LoadXml(m.Value);
...
这至少意味着我不是专门使用正则表达式:)


有人能想出更好的办法吗?有没有办法让XmlDocument礼貌地忽略导致它掉落的$character?这似乎不太可能,但我想我至少应该得到一些意见。

你能不能在运行时将
替换到那个大的
CDATA
部分,然后像往常一样加载XML文档

不,没有办法让
XmlDocument
解析一个不是xml的文档,不管它看起来多么接近xml

如果有可能的话,我肯定会建议您将文档转换为实际的xml(或至少是一些公认的文档格式)。尝试为任何格式创建和维护可靠的工作解析器都是一项艰巨的工作,更不用说一种似乎没有严格定义的格式了

使用
some_special_标记
元素来标识特殊部分对我来说似乎是个好主意。如果需要,您可以使用不同的名称空间来确保与文档中的其他元素不冲突-实际上这正是xslt的工作方式(“特殊”标记用于表示特殊的内容,如模板或节点(应该替换),以及xml设计支持的内容


另外,我不明白为什么需要将
某物放在
CDATA
部分中的
位。所有“中断”xml的字符都可以很容易地转义(例如,通过编写
我同意,为特殊目的添加一个特殊标记显然是解析的最佳选择,并在将来继续能够解析xml文档。我只是非常希望我不必让我的用户更改他们的文档,并记住以新的方式编写未来的文档。。。关于CDATA,确实可能会涉及很多转义,因为“特殊”位可能相当长,甚至可能是文档的大部分。@Neil您不能通过提供现有方法作为后援进行迁移吗?有关更多详细信息,请参阅我的更新。我没有想到这一点。这听起来似乎效果不错。