Sunday 15 January 2012

c# - how to get the normalize-space() xpath function to work? -


मैं वर्तमान में निम्नलिखित xpath कोशिश कर रहा हूं

  // tr [normalize-space (td / Code> 'उपयोगकर्ता नाम'  

सभी tr को प्राप्त करने के लिए जिसमें एक टीडी है जिसमें 'उपयोगकर्ता नाम' या 'उपयोगकर्ता शामिल है नाम ' या ' उपयोगकर्ता का नाम ' लेकिन इसका काम नहीं कर रहा है और मुझे नहीं पता कि क्वेरी में क्या गलत है :( मुझे लगता है कि डेटा को ढूंढना है जो निम्न प्रारूप में है

 <कोड> & lt; टीआर & gt; & lt; टीडी & gt; प्रयोक्ता नाम & lt; / टीडी & gt; & lt; / टीआर & gt; & lt; टीआर & gt; & lt; टीडी & gt; प्रयोक्ता नाम & lt; / टीडी & gt; & lt; / टीआर & gt; & lt; टीआर & gt; & lt; टीडी & gt; प्रयोक्ता नाम & lt; / टीडी & gt; & lt; / टीआर & gt;  

तो सही प्रारूप इस xpath क्वेरी लिखना है क्या

संपादित करें: यदि डेटा निम्न स्वरूप में है यह काम नहीं लगते

 <कोड> & lt; टीआर & gt; & lt; टीडी & gt; एक्स & lt; / टीडी & gt; & lt; टीडी & gt; प्रयोक्ता नाम & lt; / टीडी & gt; & lt; / टीआर & gt; & LT; टीआर & gt; & lt; टीडी & gt; एक्स & lt; / टीडी & gt; & lt; टीडी & gt; y & lt; / टीडी & gt; & lt; टीडी & gt; प्रयोक्ता नाम & lt; / टीडी & gt; & lt; / टीआर & gt; & lt; टीआर & gt; & lt; टीडी & gt; एक्स & lt; / टीडी & gt; & LT; टीडी & gt; y & LT; / Td & gt; & lt; टीडी & gt; z & lt; / टीडी & gt; & lt; टीडी & gt; उपयोगकर्ता का नाम & lt; / td & gt; & lt; / tr & gt;  

तो अब मैं कैसे xpath क्वेरी लिख सकता हूं? नोट: "// tr [normalize-space (td / text ()) = 'उपयोगकर्ता का नाम']" अभ्यस्त काम
लेकिन "// tr / td [normalize-space (text ()) = 'यूज़र नेम']" काम करेगा (लेकिन मैं tr को प्राप्त करना चाहता हूँ और टीडी तत्व नहीं)

अब जब आपने सवाल संपादित किया है, यह समझ में आता है के इस इनपुट पर विचार करें:

 <कोड> & lt; टीआर & gt; & lt; टीडी & gt; एक्स & lt; / टीडी & gt; & lt; टीडी & gt; प्रयोक्ता नाम & lt; / टीडी & gt; & lt; / टीआर & gt;  

और आपकी गैर-कार्यशील क्वेरी:

  // tr [सामान्य-स्थान (टीडी / पाठ ()) = 'उपयोगकर्ता नाम']   

अब, td / text () का अर्थ है "सभी नस्लों के सभी बाल पाठ नोड्स चुनें td वर्तमान नोड के नोड्स"। इस मामले में यह एक नोड-सेट प्रदान करेगा जिसमें दो पाठ नोड, x और उपयोगकर्ता नाम हो।

अब आप कॉल करें normalize-space () उस नोड-सेट पर सामान्य-स्थान () के एकमात्र तर्क का प्रकार स्ट्रिंग है? चूंकि नोड-सेट एक स्ट्रिंग नहीं है, एक्सप्रैथ 1.0 की सिफारिश के अनुसार रूपांतरण लाते हैं:

स्ट्रिंग () फ़ंक्शन को कॉल करके जैसे कि एक स्ट्रिंग को स्ट्रिंग में कनवर्ट किया जाता है।

अब खंड 4.2 में स्ट्रिंग () के को देखो:

एक नोड सेट की स्ट्रिंग-मूल्य वापस लौट कर एक स्ट्रिंग में बदल जाती है नोड-सेट में नोड जो दस्तावेज़ ऑर्डर में सबसे पहले है यदि नोड-सेट रिक्त है, तो एक रिक्त स्ट्रिंग लौटाई गई है।

हमारे उदाहरण में, "दस्तावेज़ ऑर्डर में" पहला नोड टेक्स्ट नोड x है, तो यह एक है जो इस्तेमाल किया जाएगा; दूसरा नोड पर ध्यान नहीं दिया जाता है। इस प्रकार, आप कॉलिंग को समाप्त कर देते हैं normalize-space ('x') स्वाभाविक रूप से, यह 'यूज़र नेम' के समान तुलना नहीं करेगा। यह काम करने के लिए, इसका प्रयोग करें:

  // tr [td [सामान्य-स्थान (पाठ ()) = 'उपयोगकर्ता नाम']]  

यह के रूप में "सभी tr नोड्स जो कि बच्चे को td नोड्स का चयन किया जाता है, उनका पहला बच्चा टेक्स्ट () नोड के रूप में लिखित किया जा सकता है, जिसमें से सामान्यीकृत स्ट्रिंग मान का उपयोगकर्ता नाम "- जो कि आप क्या चाहते हैं इसके अलावा, आप इसे इस प्रकार सरल कर सकते हैं:

  // tr [td [normalize-space () = 'उपयोगकर्ता नाम']]  

-रर्गमेंट सामान्य-स्थान () वर्तमान नोड पर लागू होगा (जो कि td होगा), और उसके भीतर सभी पाठ नोड्स को संसाधित करेगा।

< / html>

No comments:

Post a Comment