simplexml 和 xpath,读取兄弟 [英] simplexml and xpath, read sibling

查看:37
本文介绍了simplexml 和 xpath,读取兄弟的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下 XML 文件:

I have the following XML file :

<?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,但我真的不知道如何继续.

Inside this loop, i'd like to read the value of the sibling of the <wp:meta_key>_yoast_wpseo_title</wp:meta_key> node. For example, for item 1, i'd like to get "item-1-title". I probably have to use xpath, but i really dont know how to proceed.

我该怎么做?

推荐答案

此解决方案包括对 Wordpress XML 命名空间的引用:

This solution includes reference to the Wordpress XML namespace:

$doc = new SimpleXmlElement($xml);
$doc->registerXPathNamespace ('wp', 'http://wordpress.org/export/1.0/');

$wp_meta_title = $doc->xpath("//wp:postmeta[wp:meta_key = '_yoast_wpseo_title']/wp:meta_value");

foreach ($wp_meta_title as $title) {
    echo (string)$title . "\n";
}

结果:

item-1-title
item-2-title

参见 http://ideone.com/qjOfIW

路径//wp:postmeta[wp:meta_key = '_yoast_wpseo_title']/wp:meta_value 很简单,我认为不需要特别解释.

The path //wp:postmeta[wp:meta_key = '_yoast_wpseo_title']/wp:meta_value is pretty straight-forward, I don't think it needs special explanation.

这篇关于simplexml 和 xpath,读取兄弟的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆