2012-10-10 59 views
5

我對SimpleXml還是比較新的。我在做什麼:如何使用SimpleXml獲取元素的innerText

我有許多xml文件,它們的構建基本相同。我的問題是,有時在我的目標節點中有更多的節點。示例(試圖讓身體):

XML文件1

<?xml version="1.0" encoding="ISO-8859-1"?> 
<note> 
<firstname>My name is WHAT</firstname> 
<lastname>My name is WHO</lastname> 
<body>My name is CHIKA CHIKA Slim-Shady</body> 
</note> 

XML的文件2

<?xml version="1.0" encoding="ISO-8859-1"?> 
<note> 
<firstname>My name is WHAT</firstname> 
<lastname>My name is WHO</lastname> 
<body><b>My name is CHIKA CHIKA Slim-Shady</b></body> 
</note> 

我可以在第一時間拿到文件中的文本有沒有問題:

$xml = simplexml_load_file("filename.xml"); 
echo $xml->note->body; 

但是,當我嘗試在第二個文件中做同樣的事情時,我什麼都沒有收回。

我怎樣才能讓PHP只吐出節點中的文本,而不考慮目標節點內的任何其他節點?

回答

9

爲了遍歷

echo $xml->note->body; 

參加工作後,您的標記將需要

<note> 
    <note> 
     <body> 
     … 

爲了避免這樣的錯誤,這是很好的做法,變你simplexml_load_file名稱放入標記的根元素後,如

$note = simplexml_load_string($xml); 

爲了得到一個SimpleXMLElement你可以做 「的innerText」:

echo strip_tags($note->body->asXml()); 

asXML()方法會給你 「outerXML」 你再與strip_tags刪除。

另一種方法是導入節點到DOM,然後讓這nodeValue

echo dom_import_simplexml($note->body)->nodeValue; 
+0

哇,這是快速的......沒想到在幾分鐘內得到這麼多的答案。 – noClue

+0

經過一段時間的修補後,我終於得到它的工作。許多TNX! – noClue

+1

我討厭這樣的討論的人只是說「我得到它的工作」,而不是發佈如何讓它工作 順便說一句。 strip_tags將刪除所有標記,包括來自innerXml的標記 – Algoman

0

你並不需要添加note它應該是

首先一個

echo $xml->body; 

第二個

echo $xml->body->b ; 

輸出

My name is CHIKA CHIKA Slim-Shady 
+0

而這是正確的,說明是錯在這裏,它只是解決了問題的一半,因爲這不會產生你想輸出它會:http://codepad.org/LiireTxn – Gordon

+0

編輯沒有提到這個問題:*我怎樣才能讓PHP只吐出節點中的文本,而不考慮目標節點內的任何附加節點?* – Gordon

+0

'I可以在沒有問題的情況下在第一個文件中獲得文本:'矛盾的是......'$ xml-> note-> body'不能在目標節點內的任何格式 – Baba