2012-06-13 6 views
6

मैं निम्नलिखित पाठ के लिए नोड में सभी टेक्स्ट प्राप्त करने और एक मान (एकाधिक नोड्स नहीं) के रूप में लौटने की कोशिश कर रहा हूं।XPath तत्व में सभी पाठ को एक मान के रूप में प्राप्त करने के लिए, लाइन ब्रेक को हटाकर

<p> 
    "I love eating out." 
    <br> 
    <br> 
    "This is my favorite restaurant." 
    <br> 
    "I will definitely be back" 
</p> 

मैं '/ p' का उपयोग कर रहा हूं और सभी परिणाम प्राप्त कर रहा हूं लेकिन यह लाइन ब्रेक के साथ आता है। अलग-अलग लौटाए गए मान के रूप में प्रत्येक टैग के बीच प्रत्येक पाठ प्राप्त करने में '/ p/text()' परिणाम भी आज़माएं। आदर्श वापसी होगी -

"I love eating out. This is my favorite restaurant. I will definitely be back" 

मैं अन्य प्रश्न खोज की कोशिश की है, लेकिन जैसा कि कुछ बंद नहीं पा सके। कृपया नहीं कि वर्तमान वातावरण में मैं केवल एक XPath क्वेरी का उपयोग करने के लिए प्रतिबंधित हूं और किसी भी HTML प्री-पार्सिंग के बाद पार्स नहीं कर सकता। विशेष रूप से मैं Google डॉक्स के अंदर importXML फ़ंक्शन का उपयोग कर रहा हूं।

+0

बस के सभी सन्तान के पाठ का चयन करें ' पी 'के साथ '/ पी // */पाठ()'। 'TextContent' के साथ टेक्स्ट नोड की सामग्री तक पहुंचें। आपको अभी भी उन्हें एक साथ जोड़ना होगा। – nhahtdh

उत्तर

7

उपयोग:

normalize-space(/) 

जब यह XPath अभिव्यक्ति मूल्यांकन किया जाता है, दस्तावेज़ नोड (/) का स्ट्रिंग मान पहले उत्पादन किया जाता है और इस मानक XPath समारोह normalize-space() को तर्क के रूप में प्रदान की जाती है।

परिभाषा के अनुसार, normalize-space() अग्रणी और पिछली आसन्न सफेद जगहों के पात्रों के साथ अपना तर्क लौटाता है, और आस-पास के व्हाइटस्पेस वर्णों के किसी भी अंतरिम समूह को प्रतिस्थापित किया जाता है - एक अंतरिक्ष स्थान द्वारा प्रतिस्थापित किया जाता है।

में ऊपर XPath अभिव्यक्ति परिणाम का मूल्यांकन: "। मैं बाहर खाने से प्यार है"

"यह मेरा पसंदीदा रेस्तरां है।"" मैं निश्चित रूप से वापस हो जाएगा "

उद्धरण को खत्म करने के लिए, हम अतिरिक्त translate() समारोह का उपयोग करें:

normalize-space(translate(/,'&quot;', '')) 

इस अभिव्यक्ति के मूल्यांकन का परिणाम है:

I love eating out. This is my favorite restaurant. I will definitely be back 

अंत में, इस परिणाम को उद्धरणों में स्वयं लपेटने के लिए, हम concat() फ़ंक्शन का उपयोग करते हैं आधारित सत्यापन -

"I love eating out. This is my favorite restaurant. I will definitely be back" 

XSLT:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:value-of select= 
    "concat('&quot;', 
      normalize-space(translate(/,'&quot;', '')), 
      '&quot;' 
      )"/> 
</xsl:template> 
</xsl:stylesheet> 

इस बदलाव पर लागू किया जाता है:

concat('&quot;', 
     normalize-space(translate(/,'&quot;', '')), 
     '&quot;' 
     ) 

इस XPath अभिव्यक्ति के मूल्यांकन वास्तव में वांछित परिणाम का उत्पादन प्रदान किया गया XML दस्तावेज़ (सही अच्छी तरह से गठित एड किए जाने के लिए):

<p> 
     "I love eating out." 
     <br /> 
     <br /> 
     "This is my favorite restaurant." 
     <br /> 
     "I will definitely be back" 
</p> 

XPath अभिव्यक्ति मूल्यांकन किया जाता है और इस मूल्यांकन के परिणाम उत्पादन में कॉपी किया जाता है:

"I love eating out. This is my favorite restaurant. I will definitely be back" 
+1

कमाल की प्रतिक्रिया। यह अच्छी तरह से काम करता है, लेकिन यह सोचकर कि क्या सामान्यीकृत-स्पेस कई बच्चों को देखकर काम करता है ... जब मैंने एक पृष्ठ पर समान डेटासेट के खिलाफ सामान्यीकृत-स्पेस का उपयोग किया, तो एकाधिक एकल मानों को वापस करने की बजाय, यह केवल एक ही मूल्य लौटाया गया था पृष्ठ (भले ही समान डेटा वाले कई बच्चे थे, मैं निकालने का प्रयास कर रहा था)। मेरा लक्ष्य पृष्ठ पर कई समान क्षेत्रों का मूल्यांकन करना है और प्रत्येक को एक मूल्य के रूप में वापस करना है। –

+0

@ रिचर्ड ऑर्टेगा: यह * सिंगल * एक्सपीएथ 1.0 अभिव्यक्ति के रूप में संभव नहीं है (XPath 2.0 के साथ एक वांछित लेखन को संभवतः वांछित स्ट्रिंग वाले अनुक्रम का उत्पादन करना संभव है)। तो, XPath 1.0 के साथ आपको टेक्स्ट नोड्स को एक-एक करके चुनना होगा और XPath को होस्ट करने वाली प्रोग्रामिंग भाषा में प्रत्येक चयनित नोड को संसाधित करना होगा। यदि आप एक्सएसएलटी समाधान में रूचि रखते हैं - बस एक नया प्रश्न पूछें और मुझे बताएं :) –

+0

आपको बहुत धन्यवाद, आप बहुत मददगार रहे हैं! बहुत जानकारीपूर्ण, यह XPath का उपयोग कर मेरे पहले समय में से एक था। –

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