2015-11-04 147 views
0

我已經加載了一個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 
    } 

任何想法?我堅持下去...... 在此先感謝

回答

0

您需要了解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

相關問題