我有以下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.如上所述搜索我的节点,然后从当前节点旁边的其他节点返回数据
非常感谢提前。
答案 0 :(得分:1)
您可以使用以下XPath获取FIRMWARE_NAME
的父元素,其中VALUE
属性等于'iLO':
$ilover = $xml->FIRMWARE_INFORMATION->xpath("*[FIRMWARE_NAME/@VALUE='iLO']");
或返回FIRMWARE_VERSION
而不是父元素:
//*[FIRMWARE_NAME/@VALUE='iLO']/FIRMWARE_VERSION
答案 1 :(得分:1)
尝试以下方法:
$ilover = $xml->FIRMWARE_INFORMATION->xpath("//FIRMWARE_NAME[@VALUE='iLO']")[0]->xpath('parent::*');
它将为您提供父节点,然后您可以获得两个子节点,如:
var_dump($ilover[0]->FIRMWARE_NAME);
var_dump($ilover[0]->FIRMWARE_VERSION);