简体   繁体   English

xpath获取节点的父节点

[英]xpath get Parent of Node

I have the following XML (from an HP iLO) 我有以下XML(来自HP iLO)

<GET_EMBEDDED_HEALTH_DATA>
    <FIRMWARE_INFORMATION>
        <INDEX_1>
            <FIRMWARE_NAME VALUE = "HP ProLiant System ROM"/>
            <FIRMWARE_VERSION VALUE = "12/14/2012"/>
        </INDEX_1>
        <INDEX_2>
            <FIRMWARE_NAME VALUE = "HP ProLiant System ROM - Backup"/>
            <FIRMWARE_VERSION VALUE = "12/14/2012"/>
        </INDEX_2>
        <INDEX_3>
            <FIRMWARE_NAME VALUE = "HP ProLiant System ROM Bootblock"/>
            <FIRMWARE_VERSION VALUE = "03/11/2012"/>
        </INDEX_3>
        <INDEX_4>
            <FIRMWARE_NAME VALUE = "iLO"/>
            <FIRMWARE_VERSION VALUE = "1.13 Nov 08 2012"/>
        </INDEX_4>
        <INDEX_5>
            <FIRMWARE_NAME VALUE = "Power Management Controller Firmware"/>
            <FIRMWARE_VERSION VALUE = "3.1"/>
        </INDEX_5>
    </FIRMWARE_INFORMATION>
</GET_EMBEDDED_HEALTH_DATA>

I'm using PHP SimpleXML Xpath, and I want to find out the iLO version and select the parent, however the parent is in an unknown node (because it could be in an of the INDEX nodes. 我正在使用PHP SimpleXML Xpath,并且我想找出iLO版本并选择父级,但是父级位于一个未知节点中(因为它可能位于INDEX节点中。

I've managed to get this far: 我设法做到了这一点:

$ilover = $xml->FIRMWARE_INFORMATION->xpath("//FIRMWARE_NAME[@VALUE='iLO']");

That returns me the node with the iLO version it in, but I also need the node containing FIRMWARE_VERSION which is next to the selected node. 这将返回包含iLO版本的节点,但我还需要包含FIRMWARE_VERSION的节点,该节点位于所选节点旁边。

Is it possible to get either: 1. Search for my node as above, but to select the parent 2. Search for my node as above and then return the data from a different node next to my current node 是否有可能获得:1.如上搜索我的节点,但选择父节点2.如上搜索我的节点,然后从当前节点旁边的其他节点返回数据

Many thanks in advance. 提前谢谢了。

You can use the following XPath to get parent element of FIRMWARE_NAME where VALUE attribute equals 'iLO': 您可以使用以下XPath获取FIRMWARE_NAME父元素,其中VALUE属性等于'iLO':

$ilover = $xml->FIRMWARE_INFORMATION->xpath("*[FIRMWARE_NAME/@VALUE='iLO']");

or to return FIRMWARE_VERSION instead of the parent element : 或返回FIRMWARE_VERSION而不是父元素:

//*[FIRMWARE_NAME/@VALUE='iLO']/FIRMWARE_VERSION

Try the following: 请尝试以下操作:

$ilover = $xml->FIRMWARE_INFORMATION->xpath("//FIRMWARE_NAME[@VALUE='iLO']")[0]->xpath('parent::*');

It will get you the parent node and you can then get both child nodes like: 它将获得您的父节点,然后您将获得两个子节点,例如:

var_dump($ilover[0]->FIRMWARE_NAME);
var_dump($ilover[0]->FIRMWARE_VERSION);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM