我无法让xmerl_xpath用于涉及名称空间的XPath表达式

时间:2013-06-06 14:30:19

标签: xpath erlang xml-namespaces

我无法通过xmlerl_xpath查找带有名称空间的节点。

给出XML文档,例如

<ostrich:Zebra xmlns:ostrich=\"some-url\"/>

和XPath表达式,例如

/x:Zebra

和命名空间映射,例如

"x" => "some-url",

如何使用xmerl解析文档并将XPath表达式应用于它? 在示例中,我应该以单个Zebra节点结束?

这不起作用:

XmlStr = "<ostrich:Zebra xmlns:ostrich=\"some-url\"/>".
{Doc,_} = xmerl_scan:string(XmlStr]).
xmerl_xpath:string("/x:Zebra", Doc, [{namespace, [{"x","some-url"}]}]).

但为什么不呢?

1 个答案:

答案 0 :(得分:1)

这里的问题不在于使用xmerl_xpath - 而是因为解析后的XML文档Doc没有解析其命名空间。

要实现这一点,请将解析调用更改为

{Doc,_} = xmerl_scan:string(XmlStr, [{namespace_conformant, true}]).

然后它起作用:

XmlStr = "<ostrich:Zebra xmlns:ostrich=\"some-url\"/>".
{Doc,_} = xmerl_scan:string(XmlStr, [{namespace_conformant, true}]), ok.
length(xmerl_xpath:string("/x:Zebra", Doc, [{namespace, [{"x","some-url"}]}])).
=> 1
相关问题