2013-10-06 66 views
0

我正在尋找一種方法來從PHP的xml文件中獲取特殊類型的子項。 的XML:用PHP獲取一個特殊類型的XML文檔中的兒童

<notify type="post" name="Max" /> 

我要搶出了名的那裏。 我的代碼:`$發件人=

$sender = $node->getChild('notify'); 
    $sender = $sender->getChild('name'); 
    $sender = $sender->getData(); 

,但正如我預期它不工作的方式。 在此先感謝您的幫助

+0

'name'是一個屬性,而不是元素,也不是一個孩子。 '$ node-> getAttribute('name')'值得一試,但是:你用什麼來分析DOM? –

回答

0

您可以使用xpath表達式來完成工作。它就像一個XML的SQL查詢。

$results = $xml->xpath("//notify[@type='post']/@name"); 

假設XML中$xml,表達倒像

select all notify nodes, 
where their type-attribute is post, 
give back the name-attribute. 

$results將是一個陣列,並且我的代碼示例爲simplexml製成。不過,您可以使用與DOM相同的xpath-expression

下面是完整的代碼:

$x = <<<XML 
<root> 
    <notify type="post" name="Max" /> 
    <notify type="get" name="Lisa" /> 
    <notify type="post" name="William" /> 
</root> 
XML; 

$xml = simplexml_load_string($x); 
$results = $xml->xpath("//notify[@type='post']/@name"); 
foreach ($results as $result) echo $result . "<br />"; 

輸出:

Max 
William 

看到它的工作:http://codepad.viper-7.com/eO29FK

+0

謝謝。不幸的是,這不適用於我的節點(我不知道爲什麼,它是一個WhatsApp消息)$ nnode-> getAttributes對我的例子工作正常,但與xml的第二行它不再工作'<消息from =「[email protected]」id =「message-1381085708-3」type =「chat」t =「1381085708」'在這種情況下,我想要從。但是當我使用方法getattribute我得到的錯誤:'調用一個非對象的成員函數getAttribute()' – maaximal

+0

什麼不適用於您的節點?請修改您的問題,發佈您的XML的有效片段,描述無法使用我提供的解決方案,我們會盡力爲您提供支持。 – michi