如何匹配字符串中的完整XML对象?

时间:2010-05-27 17:55:36

标签: c# xml regex xml-serialization

我正在尝试在字符串中查找完整的XML对象。它们已被XmlSerializer放置在字符串中,但可能完成也可能不完整。我已经玩弄了使用正则表达式的想法,因为它似乎是为它们构建的那种东西,除了我正在尝试解析XML这一事实。

我正在尝试在表单中找到完整的对象:

<?xml version="1.0"?>
<type>
    <field>value</field>
    ...
</type>

我的想法是找到<?xml version="1.0"?><type></type>的正则表达式,但如果某个字段与type具有相同的名称,则显然无效。

有很多关于XML解析器的文档,但它们似乎都需要一个完整的,完整形成的文档来解析。我的XML对象可以是一个被其他任何东西包围的字符串(包括其他完整的对象)。

hw<e>reR@lot$0fr@ndm&nchrs%<?xml version="1.0"?><type><field>...</field>...</type>@ndH#r$omOre!!>nuT6erjc?y!<?xml version="1.0"?><type><field>...</field>...</type>ty!=]

正则表达式能够匹配字符串,同时排除随机字符,但找不到完整的 XML对象。我想要一些提取对象的方法,用序列化器解析它,然后重复,直到字符串不再包含有效的对象。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用Html Agility Pack,它可用于解析“格式错误的XML”并使其可以通过DOM访问。

有必要知道您正在寻找哪个元素(例如您的示例中的<type>),因为它也将解析意外元素(如示例中的<e>)。

答案 1 :(得分:0)

您可以使用正则表达式搜索“<?xml”部分,然后假设它是XML对象的开头,然后使用XMLReader读取/检查字符串的其余部分,直到您解析了一个根级别的整个元素(然后在根节点完全解析后停止使用XMLReader从流中读取)?

编辑:有关使用XMLReader的更多信息,我建议我提出的一个问题:I can never predict xmlreader behavior, any tips on understanding?

我的最终解决方案是在解析XML时坚持使用“Read”方法,并避免实际从流中读取的其他方法推进当前位置。