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

时间:2016-02-12 14:17:23

标签: php xml xpath simplexml

您好我在使用命名空间获取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>

我想得到&#34; inet&#34;作为我的xpath的结果。我使用此链接Xpath to select value of sibling attribute with namespace作为参考,并提出:

$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'));

2 个答案:

答案 0 :(得分:1)

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

尝试使用XPath:

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return self.items.count
}

答案 1 :(得分:1)

好的,这是解决方案,感谢理查德和har07的结合提供了帮助。要访问前缀的值,我使用了Richard建议的下面的xpath。根据har7发布的链接中的信息,我访问了数组中的第一个元素并将其转换为字符串,我得到了值&#34; inet&#34;。下面是代码:

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

感谢你们的帮助!