嗨,我在使用命名空间获取 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]);
感谢两位的帮助!