PHP Xpath为属性名称为“作者”的节点提取值

我正在尝试解析一些XML数据以获取某个属性的值 – 具体来说,我想找到作者.下面是一个非常简单但有效的例子. R节点重复多次.

<GSP VER="3.2">
    <RES SN="1" EN="10">
        <R N="4" MIME="application/pdf">
            <Label>_cse_rvfaxixpaw0</Label>
            <PageMap>
                <DataObject type="Metatags">
                    <Attribute name="creationdate" value="D:20021024104222Z"/>
                    <Attribute name="author" value="Diana Van Winkle"/>
                </DataObject>
            </PageMap>
        </R>
    </RES>
</GSP>

目前我这样做:

$XML = simplexml_load_string($XMLResult);
$XMLResults = $XML->xpath('/GSP/RES/R');
foreach($XMLResults as $Result) {
    $Label = $Result->Label;
    $Author = ""; // <-- How do I get this?
}

有人可以向我解释如何取出“作者”属性吗?作者属性最多会出现1次但可能根本不存在(我可以自己处理)

解决方法:

这是解决方案.基本上,您可以从结果节点调用XPath,以获取name属性等于author的所有属性元素.

然后你检查并确保结果返回,如果确实如此,它将是index [0],因为XPath调用返回一个结果数组.然后使用attributes()函数获取属性的关联数组,最后获得所需的值.

$XML = simplexml_load_string($xml_string);
$XMLResults = $XML->xpath('/GSP/RES/R');
foreach($XMLResults as $Result) {
    $Label = $Result->Label;
    $AuthorAttribute = $Result->xpath('//Attribute[@name="author"]');
    // Make sure there's an author attribute
    if($AuthorAttribute) {
      // because we have a list of elements even if there's one result
      $attributes = $AuthorAttribute[0]->attributes();
      $Author = $attributes['value'];
    }
    else {
      // No Author
    }
}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...