检查子节点是否存在并获取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)') 
+0

好的答案,以包括'SimpleXML'代码:'$股票= $ XML->的xpath( “/产物/ supplierItem [ID = '0101'] /股票” )[0];' – michi

+0

如果找不到节点(且数组为空),则直接访问节点可能会导致PHP错误消息。对于稳定的源代码,您需要验证您在访问节点之前是否有节点。就像使用foreach()一样。 – ThW