2015-11-04 6 views
0

Я загрузил xml-файл, и я хочу определенный узел, когда существует дочерний узел.Проверить, существует ли дочерний узел и получить родительский узел в xml

Например: если у поставщикаItem-> поставщик-> id есть «0101», я хочу получить запас «1» из этого конкретного поставщика. Поэтому мне нужен родительский узел узла конкретного идентификатора поставщика.

Мой 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> 

Мой первый attemp были:

$stocks = $xml->xpath("/product/supplierItem"); 
    foreach ($stocks as $stock) 
    { 
     echo($stock); // get all stocks 
    } 

Любая идея? Я застрял с этим ... Заранее спасибо

ответ

0

Вам нужно прочитать про Xpath. Он может сделать это легко и многое другое:

Fetch 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

Смежные вопросы