我正在尝试在字符串中查找完整的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对象。我想要一些提取对象的方法,用序列化器解析它,然后重复,直到字符串不再包含有效的对象。
答案 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”方法,并避免实际从流中读取的其他方法推进当前位置。