2011-12-15 9 views
5

मैं निम्नलिखित (सबऑप्टिमल) XML के साथ काम कर रहा हूँ:का उपयोग XPath गिनती() के साथ होता है()

<a> 
    <b> 
    <c>X:1 Y:0</c> 
    <c>X:1 Y:0</c> 
    <c>X:2 Y:0</c> 
    </b> 
    <b> 
    <c>X:1 Y:0</c> 
    <c>X:2 Y:0</c> 
    </b> 
</a> 

मैं XPath का उपयोग करने के <c> नोड्स जिनकी सामग्री X:1 शामिल की संख्या की गणना करने के लिए कोशिश कर रहा हूँ:

count(contains(/a/b/c, 'X:1')) 

हालांकि, यह की अपेक्षित गणना को वापस करने की बजाय एक त्रुटि देता है।

मैं क्या गलत कर रहा हूं?

+1

यह उन मामलों में जहाँ मैं झुका हो जाएगा में से एक है अपने एक्सएमएल को स्टाइलशीट के साथ प्रीप्रोसेसिंग करने का सुझाव देने के लिए जो इन तत्वों को '' आदि पर विस्तारित करने का सुझाव देने के लिए, फिर इस तरह के डेटा को प्रोसेस करना तुच्छ हो जाता है। यदि यह सिर्फ एक बार काम है तो यह शायद सार्थक नहीं है, लेकिन अगर ऐसा कुछ है तो आपको बहुत कुछ करना होगा, डेटा को अधिक उपयोग करने योग्य फॉर्म में डेटा प्राप्त करने पर विचार करना निश्चित रूप से सार्थक है। – Flynn1179

उत्तर

8

यह नहीं है कि आप का उपयोग कैसे करते हैं। प्रयास करें

count(/a/b/c[contains(., 'X:1')]) 
+0

यह पूरी तरह से काम किया, धन्यवाद! – gjb

+0

@ जीजेबी, @ फिल और अधिक: "यह नहीं है कि आप 'गिनती()' "का उपयोग कैसे करते हैं क्योंकि समस्या यह थी कि' गिनती() 'पैरामीटर के रूप में एक नोड सेट लेता है लेकिन'() 'एक बूलियन वैल्यू देता है । – jasso

+0

@jasso 'में() 'तर्क है कि तर्क एक स्ट्रिंग होने के लिए, नोड सेट नहीं है, इसलिए वास्तव में दो समस्याएं थीं – Phil

3

शायद थोड़ा और अधिक कुशल (यदि संपत्ति प्रदान की XML दस्तावेज़ में प्रदर्शित आकस्मिक नहीं है):

count(/a/b/c[starts-with(., 'X:1')]) 
+0

एक बंद कोष्ठक – newtover

+0

@ न्यूवॉवर याद किया: अच्छा पकड़, धन्यवाद। अब तय आपके सुझाव के लिए –

+0

+1, लेकिन मुझे डर है कि ऑर्डरिंग कभी-कभी भिन्न हो सकती है। – gjb

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