我以前从未使用过xpath,它使我陷入困境。我有以下XML:
<entry>
<updated>2018-02-20</updated>
<api:related>
<api:object>
<api:ever-approved>true</api:ever-approved>
<api:reporting-date-1>2017-12-31</api:reporting-date-1>
<api:repository-items>
<api:repository-item repository-id="1">
<api:public-url>http://url.com</api:public-url>
<api:content-file-count>1</api:content-file-count>
<api:licence-file-count>1</api:licence-file-count>
<api:status>accepted</api:status>
</api:repository-item>
</api:repository-items>
<api:all-labels type="keyword-list">
<api:keywords>
<api:keyword>Africa</api:keyword>
<api:keyword>Economy</api:keyword>
</api:keywords>
</api:all-labels>
</api:object>
</api:related>
...在该结构中重复。我只需要编写一些PHP来检查每个条目是否存在“ api:repository-items”或其中的任何子节点。我可以成功完成以下任务:
通过做以下事情的变体
foreach ( $this->xml->xpath( 'api:related/api:object/api:all-labels/api:keywords/api:keyword[1]' ) as $field ) {
$this->properties['xxx'] = $field;
}
if ( isset( $this->properties['xxx'] ) ){
return $this->properties['xxx'];
} else {
return 'nada';
}
那很好。但是,我无法遍历存储库项目中的任何内容-我只会得到'nada'。
我尝试过:
我在做什么错-还有其他建议吗?谢谢!
答案 0 :(得分:1)
如果我正确理解了XML,则这是正确的XPATH:
'//entry//api:repository-items'
//entry
在XML中搜索到名为entry
的节点的相对路径,而//api:repository-items
在嵌套在api:repository-items
上的节点//entry
上搜索相对路径。在Col1 Col2 Col3 Col4
data1 data2 data3 abc
data2 data3 data2 abcde
data1 data2 data3 abcfef3f
上找到的节点。
我强烈建议阅读w3schools XPATH guide。这是一本很好的指南,其中包含一些有关XPATH的信息,并带有一些图形示例,而且用时不长。