XPath 以使用命名空间选择属性的值


XPath to select value of an attribute using namespace

嗨,我在使用命名空间获取 xml 文件中的属性值时遇到问题。

<module name="ietf-inet-types"
        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
        xmlns:inet="urn:ietf:params:xml:ns:yang:ietf-inet-types">
  <namespace uri="urn:ietf:params:xml:ns:yang:ietf-inet-types"/>
  <prefix value="inet"/>
</module>

我想得到"inet"作为我的xpath的结果。我使用此链接 Xpath 选择以命名空间作为参考的同级属性的值,并得出:

$xml->xpath('/n:module/n:prefix/@n:value');

其中 n 是命名空间前缀。但是我结果得到了一个空数组,我到底在这里做错了什么?

更新:这是我用来检索值的一些 php 代码。

//gets the namespace from the model
$xpathNamespace = getXpathNamespace($domxml);
$xml = simplexml_load_string($domxml->saveXML());
$xml->registerXPathNamespace("n", $xpathNamespace);
print_r($xml->xpath('/n:module/n:prefix/@n:value'));

在没有命名空间标记的 XML 属性中(例如。 value ) 不在任何命名空间中:默认命名空间不适用于属性。

试试XPath:

/n:module/n:prefix/@value
好的,这是

解决方案,感谢理查德和 har07 的帮助。为了访问前缀的值,我使用了理查德建议的以下 xpath。从har7发布的链接中的信息,我访问了数组中的第一个元素并将其转换为字符串,并得到了值" inet"。这是代码:

$prefix = $xml->xpath('/n:module/n:prefix/@value');
print_r((string)$prefix[0]);

感谢两位的帮助!