2011-06-27 14 views
5

Jak mogę uzyskać tekst z wnętrza węzła za pomocą xpath?Php i Xpath - jak uzyskać tekst z wnętrza węzła?

Na razie robię to tak:

$temp= $content->xpath('qwe/qwe'); 
$temp = each($temp[0]); 
return $temp['value']; 

Ale jak widać to jest dalekie od dobrego rozwiązania :(

w C# jest to tak proste jak

public string readXmlVar(string xpath) 
{ 
    XmlNode xmlNode = xml.SelectSingleNode(xpath); 
    return xmlNode.InnerText; 
} 
+1

Wystarczy rzucić je jako wyrażenie: 'return (string) $ Temp;' – prodigitalson

+0

hm, że działa :) Dlaczego nie napisałeś poprawnej odpowiedzi? Dodałabym cię i wybrałam odpowiedź :) – NewProger

+0

php może być czasem tak szalonym językiem ... nigdy nie wiesz, co zrobić w niektórych przypadkach ... – NewProger

Odpowiedz

7

Dla SimleXmlElement wystarczy rzucić go jako ciąg: return (string) $temp;. Dla DomDocument użyj return $temp->nodeValue.

+2

Trzeba uważać thoguh, używając '$ temp-> nodeValue' dla' DomDocument' zwróci treść tekstową ze wszystkich dzieci poniżej danego węzła (w tym dzieci dzieci). – Yoshi

6

Wypróbuj:

$dom = new DOMDocument; 
$dom->loadXML('<root> 
    <p>some text<br />some more text</p> 
</root>'); 

$xpath = new DOMXPath($dom); 
foreach ($xpath->query('/root/p/text()') as $textNode) { 
    echo $textNode->nodeValue; 
} 

$textNode będzie DOMText.

+0

Korzystanie z foreach jest jeszcze gorsze ... – NewProger

+0

@Lurler Dlaczego? Jeśli chcesz całą treść tekstową, po prostu zbieraj wartości węzłów. Jest to prosta domowa wędrówka, nie jest nawet specyficzna dla PHP. – Yoshi

+0

Ponieważ tworzy kopię zmiennej, a następnie iteruje nad nią. Jest całkowicie nieefektywny. – NewProger

2
(string) current($xml->xpath("//group[@ref='HS_TYP']")) 

nadzieję, że pomoże

+0

Znacznie lepiej. Proste i kompletne, jednoliniowe rozwiązanie prostego pytania. – meustrus

1

Pozwoli to uzyskać wszystkie wewnętrzną tekst z elementu proste xml

dom_import_simplexml($xpath->query('//div[@class="h1"]')->textContent; 
Powiązane problemy