我能';不能让xmerl_xpath用于涉及名称空间的xpath表达式

我能';不能让xmerl_xpath用于涉及名称空间的xpath表达式,xpath,erlang,xml-namespaces,Xpath,Erlang,Xml Namespaces,我无法让xmlerl_xpath查找具有名称空间的节点 给定一个XML文档,例如 <ostrich:Zebra xmlns:ostrich=\"some-url\"/> 和名称空间映射,例如 "x" => "some-url", 如何使用xmerl解析文档并对其应用XPath表达式? 在本例中,我应该以单个Zebra节点结束 这不起作用: XmlStr = "<ostrich:Zebra xmlns:ostrich=\"some-url\"/>". {Doc,_

我无法让xmlerl_xpath查找具有名称空间的节点

给定一个XML文档,例如

<ostrich:Zebra xmlns:ostrich=\"some-url\"/>
和名称空间映射,例如

"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"}]}]).
XmlStr=”“。
{Doc,{}=xmerl\u scan:string(XmlStr])。
xmerl_xpath:string(“/x:Zebra”,Doc,[{名称空间,[{“x”,“某些url”}]}])。

但是为什么不呢?

这里的问题不在于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
XmlStr=”“。
{Doc,{}=xmerl\u scan:string(XmlStr,[{符合名称空间,true}]),确定。
长度(xmerl_xpath:string(“/x:Zebra”,Doc,[{namespace,[{“x”,“someurl”}]}]))。
=> 1

在您的xml示例中,什么是符合名称空间的?什么是名称空间?
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