检查子节点是否存在并获取xml中的父节点

时间:2015-11-04 12:48:16

标签: php xml nodes

我已经加载了一个xml文件,并且在子节点存在时我想要一个特定的节点。

例如:如果supplierItem-> supplier-> id为" 0101"我想得到股票" 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
    }

有什么想法吗?我坚持了...... 提前致谢

1 个答案:

答案 0 :(得分:0)

您需要阅读有关Xpath的信息。它可以轻松地做到这一点:

获取supplierItem个节点...

/product/supplierItem

...使用子节点id ...

/product/supplierItem[id]

...等于'0101'......

/product/supplierItem[id = "0101"]

...并从中获取stock元素节点:

/product/supplierItem[id = "0101"]/stock

SimpleXMLElement::xpath()只能返回节点数组,但Xpath本身甚至可以直接获取值。在PHP中DOMXpath::evaluate()

$stock = $domXpath->evaluate('string(/product/supplierItem[id = "0101"]/stock)')