代码之家  ›  专栏  ›  技术社区  ›  Artem Russakovskii

在C++中通过LIbxML2解析部分XML时过滤掉命名空间错误

  •  3
  • Artem Russakovskii  · 技术社区  · 14 年前

    我需要解析部分XML片段(显示为std::string),例如:

    <FOO:node>val</FOO:node>

    作为 xmlDoc libxml2中的对象,因为这些是片段,所以我一直在获取 namespace error : Namespace prefix FOO on node is not defined 错误输出到stderr。

    我要寻找的是一种过滤这些名称空间警告的方法,或者直接将XML片段解析为 xmlNode 对象。

    我认为使用initGenericErrorDefaultFunc()进行某种黑客攻击可能是为了实现第一步,但是libxml2的文档绝对是残暴的。

    坦率地说,我更喜欢使用第二种方法,因为它不需要进行错误黑客攻击,而且节点已经知道名称空间,但我认为这是不可能的,因为节点必须有根,并且XML片段不能保证只有一个根。

    这里我只需要一些关于如何消除名称空间错误警告的指导。

    非常感谢你。

    2 回复  |  直到 14 年前
        1
  •  3
  •   LarsH    14 年前

    基于@potatoswatter所说的…你能为片段创建一个上下文吗?例如,连接

    <dummyRoot xmlns:FOO="dummy-URI">
    

    在你的碎片前面,和

    </dummyRoot>
    

    然后,将连接的字符串传递给xmlparsememory()。

    或者,为什么不使用xmlparseinnodecontext(),它允许您在节点中传递以用作上下文(包括名称空间),内容可以是任何平衡良好的块(例如,没有单个根元素的多个元素)。

    任何一种方法都要求您知道,或者可以扫描以找出片段可能使用的所有可能的名称空间前缀集。

        2
  •  0
  •   Bart van Ingen Schenau    14 年前

    它不是传递xmlparseroptions的选项吗 XML_PARSE_NOERROR 和/或 XML_PARSE_NOWARNING 到解析器?