0

我无法让 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"}]}]).

但为什么不呢?

4

1 回答 1

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
于 2013-06-06T14:30:19.430 回答