2012-10-10 14 views
5

Wciąż jestem całkiem nowy z SimpleXml. Co próbuję zrobić:Jak uzyskać innerText elementu za pomocą SimpleXml

Mam wiele plików xml, które są zbudowane mniej więcej tak samo. Mój problem polega na tym, że czasami w moim węźle docelowym jest więcej węzłów. Przykład (próbując ciała):

xml-file 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> 

pliku 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> 

mogę uzyskać tekst w pierwszym pliku bez problemu:

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

Ale kiedy próbuję zrobić to samo w drugim pliku, nic nie otrzymuję.

Jak mogę uzyskać php, aby wypluwał tekst w węźle, bez względu na dodatkowe węzły w węźle docelowym?

Odpowiedz

9

Aby traversal

echo $xml->note->body; 

do pracy, czy znaczniki musiałyby być

<note> 
    <note> 
     <body> 
     … 

Aby uniknąć takich błędów, jest to dobra praktyka, aby nazwać zmienną simplexml_load_file się po elemencie głównym w znacznikach, np

$note = simplexml_load_string($xml); 

Aby uzyskać "innerText" o SimpleXMLElement można zrobić:

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

metoda asXML() daje "outerXML", który następnie usunąć z strip_tags.

Alternatywą byłoby importowanie węzła do DOM i następnie coraz to nodeValue

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

Wow, który był szybki ... nie spodziewał się uzyskać tak wielu odpowiedzi w ciągu kilku minut. – noClue

+0

Po majstrowaniu przez chwilę w końcu udało mi się go uruchomić. Wiele tnx! – noClue

+1

Nienawidzę, gdy ludzie w takich dyskusjach po prostu mówią "Mam to działa" zamiast publikowania JAK mają to do pracy btw. strip_tags usuwa WSZYSTKIE znaczniki, w tym znaczniki z innerXml – Algoman

0

Nie trzeba dodawać note Należy

Pierwszy z nich

echo $xml->body; 

drugi

echo $xml->body->b ; 

Wyjście

My name is CHIKA CHIKA Slim-Shady 
+0

natomiast prawdą jest, że notatka jest źle tutaj, tylko rozwiązuje połowę tego problemu, bo to nie będzie produkować wyjście myślisz będzie: http://codepad.org/LiireTxn – Gordon

+0

Edycja pomija pytanie: * Jak mogę uzyskać php, aby wypluwał tekst w węźle, bez względu na dodatkowe węzły w węźle docelowym? * – Gordon

+0

'I może dostać tekst w pierwszym pliku bez problemu: 'zaprzecza temu .....' $ xml-> note-> body' nie działa na żadnym z formatów – Baba

Powiązane problemy