簡體   English   中英

xpath獲取節點的父節點

[英]xpath get Parent of Node

我有以下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>

我正在使用PHP SimpleXML Xpath,並且我想找出iLO版本並選擇父級,但是父級位於一個未知節點中(因為它可能位於INDEX節點中。

我設法做到了這一點:

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

這將返回包含iLO版本的節點,但我還需要包含FIRMWARE_VERSION的節點,該節點位於所選節點旁邊。

是否有可能獲得:1.如上搜索我的節點,但選擇父節點2.如上搜索我的節點,然后從當前節點旁邊的其他節點返回數據

提前謝謝了。

您可以使用以下XPath獲取FIRMWARE_NAME父元素,其中VALUE屬性等於'iLO':

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

或返回FIRMWARE_VERSION而不是父元素:

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

請嘗試以下操作:

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

它將獲得您的父節點,然后您將獲得兩個子節點,例如:

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