我无法通过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"}]}]).
但为什么不呢?
答案 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