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

时间:2010-07-13 00:18:15

标签: c++ xml parsing namespaces libxml2

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

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

作为libxml2中的xmlDoc个对象,并且由于这些是片段,我不断将namespace error : Namespace prefix FOO on node is not defined错误吐出到STDERR中。

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

我认为使用initGenericErrorDefaultFunc()进行某种攻击可能是为了第一种方式,但libxml2的文档绝对是残酷的。

我坦率地倾向于使用第二种方法,因为它不需要错误黑客,并且节点已经知道命名空间,但我不认为这是可能的,因为节点必须有一个根和XML片段不保证只有一个根。

我只需要一些关于如何摆脱命名空间错误警告的指导。

非常感谢。

2 个答案:

答案 0 :(得分:3)

基于@Potatoswatter所说的......你能为片段创建一个上下文吗?例如。级联

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

在你的片段前面,

</dummyRoot>

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

或者,为什么不使用xmlParseInNodeContext(),它允许您传入一个节点以用作上下文(包括名称空间),内容可以是任何Well Balanced Chunk(例如,没有单个根元素的多个元素)

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

答案 1 :(得分:0)

是不是可以将xmlParserOptions XML_PARSE_NOERROR和/或XML_PARSE_NOWARNING传递给解析器?