首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在给定位置找到无效XML字符串中的父元素。

在给定位置找到无效XML字符串中的父元素。
EN

Stack Overflow用户
提问于 2013-02-21 14:57:03
回答 1查看 304关注 0票数 0

示例:

代码语言:javascript
复制
...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...

我需要在(例如)找到包含元素的父元素。以上所述位置。 结果是:{位置1} =测试{位置2} =b{位置3} =c{位置4} =d{位置5} =e{位置6} =b{位置7} =测试 备注:-任何元素标记名称都不知道-空字符串可能包含非xml内容-数据的大小非常大(>50 may文本文件)。

必须实现从给定位置开始向后读取的搜索技术,直到找到有效的匹配(如果有的话)。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2013-02-21 15:18:13

根据定义,无效的XML不能被解析。这就是为什么任何XML解析器都会拒绝解析它并返回一个错误。

如果XML解析器不能解析它,您(基本上)也不能解析它。您所要求的不是一些简单的字符串或简单的标记集合,这些标记可以被正则表达式抓取。你真的必须做一个完整的分析(可能是无效的数据!)以便在特定位置找到父标记。

更新:要了解我在说什么,请考虑在您的示例中找到{position 1}的父级。

  • 解决这个问题的简单方法可能是“倒退并找到开始标记”。但是你显然不能接受你找到的第一个开始标记(<a>),因为它会在位置之前关闭。
  • 因此,当您返回时,您必须看到</a>,并记住<a>标记是关闭的,这样您就不会将<a>计算为父标记。
  • 当然,在找到父标记之前,可能会有任意数量的打开和关闭标记。您必须跟踪所有这些标记(包括同一标记的多次出现)。

正如你所看到的,这是相当复杂的。这是在允许文件中的任何无效元素之前。

一种简单的方法可能有效:如果您确切地知道文件错误是什么,您可以删除这些错误,然后将更正的文件输入XML解析器。

否则,您将不得不为特定品牌的无效XML编写自己的自定义解析器。这甚至可能是不可能的,这取决于文件中错误的类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15005337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档