2011-06-27 4 views
5

xpath का उपयोग करके मुझे नोड के अंदर से टेक्स्ट कैसे प्राप्त किया जा सकता है?पीएचपी और एक्सपैथ - एक नोड के अंदर से पाठ कैसे प्राप्त करें

अभी के लिए मैं इसे इस तरह कर रहा हूँ: है अब तक अच्छा समाधान :(

सी # में से

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

लेकिन जैसा कि आप देख सकते हैं यह उतना आसान

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

बस एक स्ट्रिंग के रूप में यह डाली सरल एक्सएमएल तत्व से सभी आंतरिक पाठ मिल जाएगा: 'वापसी (स्ट्रिंग) $ अस्थायी;' – prodigitalson

+0

एचएम, कि काम करता है :) आपने उचित उत्तर क्यों नहीं लिखा? मैं आपको प्लस करता हूं और आपका उत्तर चुनता हूं :) – NewProger

+0

php कभी-कभी ऐसी पागल भाषा हो सकती है ... आप कभी नहीं जानते कि कुछ मामलों में क्या करना है ... – NewProger

उत्तर

7

SimleXmlElement के लिए बस इसे एक स्ट्रिंग के रूप में डालें: return (string) $temp;DomDocument के लिए return $temp->nodeValue का उपयोग करें।

+2

'डोमडॉक्यूमेंट' के लिए '$ temp-> nodeValue' का उपयोग करके सावधान रहना होगा, दिए गए नोड के नीचे सभी बच्चों से टेक्स्ट सामग्री वापस कर देगा (बच्चों के बच्चों सहित)। – Yoshi

6
है

प्रयास करें:

$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; 
} 

$textNodeDOMText होगा।

+0

foreach का उपयोग करना और भी बदतर है ... – NewProger

+0

@Lurler क्यों? यदि आप सभी टेक्स्ट सामग्री चाहते हैं, तो बस नोड मान एकत्र करें। यह सरल डोम ट्रैवर्सिंग है, यह PHP विशिष्ट भी नहीं है। – Yoshi

+0

क्योंकि यह चर की प्रति बनाता है और फिर इसे फिर से चलाता है। यह पूरी तरह से अक्षम है। – NewProger

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

आशा है कि मदद करता है

+0

बहुत बेहतर। एक साधारण प्रश्न के लिए एक सरल और पूर्ण एक-लाइन समाधान। – meustrus

1

यह

dom_import_simplexml($xpath->query('//div[@class="h1"]')->textContent; 
संबंधित मुद्दे