2010-03-10 9 views
9

<td></td><td>foo</td>मैं XPath में खाली नोड के टेक्स्ट() के लिए '' कैसे लौटा सकता हूं?

मैं ['', 'foo'] लेकिन libxml के xpath //td/text() रिटर्न सिर्फ ['foo'] वापसी करना चाहते हैं। मैं खाली टैग (0 मिलान नहीं) के बजाय '' के रूप में कैसे ढूंढूं?

उत्तर

6

जब तक आप विशेष रूप से टेक्स्ट नोड्स का चयन कर रहे हैं, तो आप नहीं कर सकते। क्योंकि पहले <td> में कोई टेक्स्ट नोड नहीं है।

जब आप अपनी XPath अभिव्यक्ति को '//td' पर बदलते हैं, तो आपको दो <td> नोड्स मिलते हैं। आगे की प्रसंस्करण में उनके पाठ मूल्य का प्रयोग करें।

+1

मैं सभी 'td' नोड्स खोजने और उन पर .text बुला समापन। एक बड़े XPath में सब कुछ करने के रूप में शांत नहीं ;-) लेकिन यह काम करता है। – joeforker

+0

@joeforker: जब तक आपके पास सभी चमकदार XPath 2.0 तक पहुंच नहीं है, यह आपका एकमात्र विकल्प है। :-) – Tomalak

7

जबकि @Tomalak पूरी तरह से सही है, XPath 2.0 एक में उपयोग कर सकते हैं:

//td/string(.)

और इस तार के एक दृश्य पैदा करता है - एक इसी td तत्व की स्ट्रिंग मान युक्त हर एक।

तो, आपके मामले में परिणाम वांछित हो जाएगा एक:

"", "foo"

+1

+1। यह ठीक है कि मेरा समाधान XPath 1.0 के लिए क्या करता है - यह '' नोड्स लेता है और फिर उनके संबंधित टेक्स्ट मान का उपयोग करता है। – Tomalak

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