2012-10-10 21 views
5

के साथ किसी तत्व के आंतरिक टेक्स्ट को कैसे प्राप्त करें मैं अभी भी SimpleXml के साथ बिल्कुल नया हूं। मैं क्या करने की कोशिश कर रहा हूं:SimpleXml

मेरे पास कई एक्सएमएल-फाइलें हैं, जो इसके बारे में हैं। मेरी समस्या यह है कि कभी-कभी मेरे लक्षित नोड में और नोड्स होते हैं।

: मुझे कोई समस्या नहीं के साथ पहली फ़ाइल में पाठ प्राप्त कर सकते हैं 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> 

एक्सएमएल फ़ाइल 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 साथ हटाने दे देंगे।

विकल्प डोम में नोड आयात करने और फिर किया जाएगा हो रही यह nodeValue

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

वाह जो तेजी से था ... कुछ ही मिनटों में इतने सारे जवाब प्राप्त करने की उम्मीद नहीं थी। – noClue

+0

थोड़ी देर के लिए टिंकरिंग के बाद मुझे अंत में काम करने के लिए मिला। कई टीएनएक्स! – noClue

+1

मुझे इस बात से नफरत है कि इस तरह के विचार-विमर्श में लोगों ने यह कहने के बजाय "मुझे काम करने के लिए मिल गया" कहने के बजाय उन्हें बीटीडब्ल्यू पर काम करने के लिए मिला। स्ट्रिप_टैग सभी टैग हटा देंगे, जिसमें आंतरिक एक्सएमएल – 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 बिना किसी समस्या के पहले फ़ाइल में पाठ प्राप्त कर सकते हैं: 'contradicts that ..... '$ xml-> नोट-> बॉडी' किसी भी प्रारूप पर काम नहीं करता – Baba

संबंधित मुद्दे