2011-10-19 25 views
5

हाय दोस्तों निम्न xpath काम नहीं कर रहा है।एक्स स्ट्रैथ के साथ दो अलग-अलग नोड्स की सम स्ट्रिंग-लंबाई - दो नोड स्ट्रिंग-लंबाई

//FullName[sum(string-length(FirstName) | string-length(LastName))>= 30] 

त्रुटि: अभिव्यक्ति को नोड-सेट पर मूल्यांकन करना होगा।

एक्सएमएल टुकड़ा

<FullName> 
<FirstName>somereallylongfirstnameguy</FirstName> 
<LastName>somereallylonglasttnameguyabcdefghijklmnopqrstuv</LastName> 
</FullName> 

मैं जानता हूँ कि योग समारोह एक साथ नंबर जोड़ती है और स्ट्रिंग लंबाई रिटर्न संख्या।

निम्नलिखित अभिव्यक्ति ठीक काम करता है:

//FullName[string-length(FirstName) >= 1] 

किसी भी मदद की सराहना की जाएगी, धन्यवाद!

उत्तर

4

sum() फ़ंक्शन expects a node-set, जिसे आप अपने string-length() कॉल प्रदान करने का प्रयास करते हैं, लेकिन यह विफल हो जाता है। sum() यहां उचित कार्य नहीं प्रतीत होता है।

आप या तो केवल ऊपर लंबाई सीधे विधेय में जोड़ सकते हैं:

//FullName[string-length(FirstName)+string-length(LastName) >= 30] 

या आप श्रेणीबद्ध का उपयोग पहले, तो लंबाई प्राप्त कर सकते हैं:

//FullName[string-length(concat(FirstName,LastName)) >= 30] 

या, अपने टुकड़ा प्रतिनिधि है अगर सभी FullName तत्वों के लिए, बस संदर्भ नोड की सभी टेक्स्ट नोड सामग्री की लंबाई पर विचार करें:

//FullName[string-length() >= 30] 
+0

पिछले सुझाव केवल स्टाइलशीट निर्दिष्ट करता है और यदि 'काम करता है ', अन्यथा लंबाई भी खाली स्थान के शामिल होंगे। –

+0

जानकारी के लिए धन्यवाद! मैं इसकी सराहना करता हूं – james31rock

2

यदि नामों की संख्या भिन्न हो सकती है (जैसे मध्य इनिटिल, ओरेक्स, प्रत्यय, आदि ...), आमतौर पर एक XPath 1.0 अभिव्यक्ति के साथ वांछित राशि प्राप्त करना संभव नहीं है।

XPath 2.0 में यह संभव है:

//FullName[sum(*/stringlength()) ge 30]