SimpleXML:使用特定属性获取父级子级

时间:2014-04-09 20:54:56

标签: php xml simplexml xml-namespaces

我正在尝试仅为'US'提取PageViews%,而我在设置xpath方面遇到了麻烦。有什么想法吗?

<aws:TrafficData>
<aws:DataUrl type="canonical">jobdiagnosis.com/</aws:DataUrl>
<aws:RankByCountry>
  <aws:Country Code="IN">
    <aws:Rank>54968</aws:Rank>
    <aws:Contribution>
      <aws:PageViews>0.46%</aws:PageViews>
      <aws:Users>0.46%</aws:Users>
    </aws:Contribution>
  </aws:Country>
  <aws:Country Code="US">
    <aws:Rank>703</aws:Rank>
    <aws:Contribution>
      <aws:PageViews>78.11%</aws:PageViews>
      <aws:Users>77.39%</aws:Users>
    </aws:Contribution>
  </aws:Country>
</aws:RankByCountry>

 

xpath('//Country[Code="US"]//PageViews')

4 个答案:

答案 0 :(得分:1)

文档中的所有元素都在某个命名空间中,因此您需要为该命名空间URI注册前缀,并在XPath表达式的每个步骤中使用该前缀来引用元素名称。注册的前缀不必与文档中使用的前缀匹配,但名称空间URI必须匹配。

假设您已将XML读入变量$xml

$xml->registerXPathNamespace("aws", "http://that.namespace.uri");
$pageviews = $xml->xpath('//aws:Country[@Code="US"]/*/aws:PageViews');

答案 1 :(得分:0)

试试这个:

xpath('//Country[Code="US"]//PageViews')

而不是:

xpath('//Country[Code="US"]//PageView')

<强>更新

试试这个:

xpath('/Country[@Code="US"]/PageViews']

答案 2 :(得分:0)

介意命名空间(aws):

$pageviews = $xml->xpath('//aws:Country[@Code="US"]/Contribution/PageViews');

或使用http://www.php.net/manual/en/simplexmlelement.registerxpathnamespace.php

答案 3 :(得分:-1)

感谢大家的帮助,但是我仍然无法使用xpath工作。决定诉诸于按国家排名&#39;排名。阵列直到找到&#39; US&#39;。不理想,但它将满足我的需求。再次感谢!