我有以下 XML 文件:
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<item>
[...]
<wp:postmeta>
<wp:meta_key>_wp_old_slug</wp:meta_key>
<wp:meta_value><![CDATA[item-1-slug]]></wp:meta_value>
</wp:postmeta>
<wp:postmeta>
<wp:meta_key>_yoast_wpseo_title</wp:meta_key>
<wp:meta_value><![CDATA[item-1-title]]></wp:meta_value>
</wp:postmeta>
[...]
</item>
<item>
[...]
<wp:postmeta>
<wp:meta_key>_wp_old_slug</wp:meta_key>
<wp:meta_value><![CDATA[item-2-slug]]></wp:meta_value>
</wp:postmeta>
<wp:postmeta>
<wp:meta_key>_yoast_wpseo_title</wp:meta_key>
<wp:meta_value><![CDATA[item-2-title]]></wp:meta_value>
</wp:postmeta>
[...]
</item>
</channel>
</rss>
我正在循环浏览我的项目
$xmlurl = file_get_contents($xmlFile);
$xml = simplexml_load_string($xmlurl, null, LIBXML_NOCDATA);
$items = $xml->channel->item;
foreach( $items as $item ) {
}
在这个循环中,我想读取同级的值<wp:meta_key>_yoast_wpseo_title</wp:meta_key>
节点。例如,对于第 1 项,我想获取“item-1-title”。
我可能必须使用 xpath,但我真的不知道如何继续。
我怎样才能做到这一点 ?
$xpath = './/wp:meta_key[text()="_yoast_wpseo_title"]/following-sibling::wp:meta_value[1]/text()';
$items = $xml->channel->item;
foreach( $items as $item ) {
$result = $item->xpath($xpath);
print "$result[0]\n";
}
// => item-1-title
// => item-2-title
XPath表达式的解释:
. - from the current node...
//wp:meta_key - get all descendant wp:meta_key nodes
[text()="_yoast_wpseo_title"] - whose text content is _yoast_wpseo_title
/following-sibling:: - then get the siblings that come after this
wp:meta_value[1] - with tag wp:meta_value; only take the first
/text() - and read its text
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)