示例:
...some string content here...
<test>
<a>
...something...
</a>
<a/>
{position 1}
<b>{position 2}
<c>
...something else...
{position 3}
</c>
<c/>
<d>
<e/>
{position 4}
<e>
...another thing here...
{position 5}
</e>
</d>
{position 6}
</b>
{position 7}
...more xml and other sting content...
我需要在(例如)位置找到父封闭元素 如上所述。
结果将是:{position 1} = test {position 2} = b {position 3} = c {position 4} = d {position 5} = e {position 6} = b {position 7} =测试
说明: - 没有任何元素标记名称已知 - 孔串可以包括非xml内容 - 数据的大小非常大(> 50MB文本文件)
必须有一种搜索技术,从给定位置开始向后读取,直到找到有效匹配(如果有)。
感谢名单
答案 0 :(得分:1)
根据定义,无法解析无效的XML。这就是为什么任何XML解析器都会拒绝解析它并返回错误。
如果XML解析器无法解析它,你也不能(基本上)。你要求的不是一些简单的字符串或简单的标签集合,可以被正则表达式抓取。你真的必须做一个完整的解析(可能是无效的数据!),以便在特定的位置找到父标签。
更新:,看看我在说什么,考虑在您的示例中找到{position 1}
的父级。
<a>
),因为它在该位置之前关闭。</a>
,并记住<a>
标记已关闭,因此您不会将<a>
视为父级。如您所见,这非常复杂。这是在您允许文件中的任何无效元素之前。
一种可行的简单方法:如果您确切知道文件错误是什么,则可以删除这些错误,然后将更正后的文件提供给XML解析器。
否则,您必须为特定品牌的无效XML编写自己的自定义解析器。它甚至可能不可能,具体取决于文件中的错误类型。