检查子节点是否存在并获取xml中的父节点
问题描述:
我已经加载了一个xml文件,并且我想要一个特定的节点,当一个子节点存在时。检查子节点是否存在并获取xml中的父节点
例如:如果supplierItem-> supplier-> id是“0101”我想从此特定supplierItem中获取库存“1”。所以我需要特定供应商ID的父母股票节点。
我的XML看起来像这样
<product>
<supplierItem>
<id>0001</id>
<supplier>
<id>0101</id>
<name>Company_1</name>
</supplier>
<supplierItemId>Product_1_ID</supplierItemId>
<productName>Product_1</productName>
<stock>1</stock>
</supplierItem>
<id>0002</id>
<supplier>
<id>0202</id>
<name>Company_2</name>
</supplier>
<supplierItemId>Product_1_ID</supplierItemId>
<productName>Product_1</productName>
<stock>2</stock>
</supplierItem>
<id>0003</id>
<supplier>
<id>0303</id>
<name>Company_3</name>
</supplier>
<supplierItemId>Product_1_ID</supplierItemId>
<productName>Product_1</productName>
<stock>3</stock>
</supplierItem>
</product>
我的第一个学尝试是:
$stocks = $xml->xpath("/product/supplierItem");
foreach ($stocks as $stock)
{
echo($stock); // get all stocks
}
任何想法?我坚持下去...... 在此先感谢
答
您需要了解Xpath。它可以做到这一点很容易和更大量的:
取supplierItem
节点...
/product/supplierItem
...随着一个子节点id
...
/product/supplierItem[id]
。 ..等于'0101'...
/product/supplierItem[id = "0101"]
...,并从它取回stock
元件节点:
/product/supplierItem[id = "0101"]/stock
SimpleXMLElement::xpath()
只能返回节点的数组,但是Xpath的itselfs甚至允许直接提取的值。在PHP这是可能与DOMXpath::evaluate()
:
$stock = $domXpath->evaluate('string(/product/supplierItem[id = "0101"]/stock)')
好的答案,以包括'SimpleXML'代码:'$股票= $ XML->的xpath( “/产物/ supplierItem [ID = '0101'] /股票” )[0];' – michi
如果找不到节点(且数组为空),则直接访问节点可能会导致PHP错误消息。对于稳定的源代码,您需要验证您在访问节点之前是否有节点。就像使用foreach()一样。 – ThW