2010-03-05 17 views
27

के साथ नोड्स की संख्या गिनने के लिए XPath का उपयोग कैसे करूं, मुझे अपने परिदृश्य के लिए काम करने के लिए XPath अभिव्यक्ति नहीं मिल रही है। मैं उन सभी "डिवाइस" नोड्स को ढूंढना चाहता हूं जिनमें "EndDevice" प्रकार है। मैं सभी "डिवाइस" नोड्स को गिनने में सक्षम हूं, और मैं "एंडडिवाइस" विशेषता के साथ सभी "डिवाइस" नोड्स भी ढूंढ सकता हूं। हालांकि, मैं उन्हें गठबंधन नहीं कर सकता!मैं एक निश्चित विशेषता

count(//Device) //works 
//Device[@xsi:type='EndDevice'] //works 
count(//Device[@xsi:type='EndDevice']) //doesn't work 

यदि यह महत्वपूर्ण है, तो मैं XPathbuilder का उपयोग कर रहा हूं।

+0

आपका क्या मतलब है कि दूसरा "काम" करता है? क्या यह कुछ नोड्स से मेल खाता था? आपका XPath सही दिखता है, इसलिए कुछ ऐसा नहीं है जो कोड के उस अनुभाग में काम नहीं कर रहा है जिसे आप नहीं दिखा रहे हैं, या जिस टूल में आप उपयोग कर रहे हैं। –

उत्तर

20

मैंने इसे XPathBuilder 2.0.0.4 का उपयोग करके पुन: उत्पन्न किया। हालांकि XPath अभिव्यक्ति एक ऑनलाइन मूल्यांकनकर्ता में सही ढंग से काम करता है और मूल्यांकन करता है मैंने कोशिश की (http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm)।

संपादित करें: इसके अलावा Altova XMLSpy के नवीनतम संस्करण के साथ की कोशिश की

इनपुट:

<?xml version="1.0"?> 
<asdf xmlns:xsi="n/a"> 
    <Device xsi:type='EndDevice'/> 
    <Device xsi:type='EndDevice'/> 
    <Device xsi:type='EndDevice'/> 
    <Device xsi:type='EndDevice'/> 
</asdf> 

xslt:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsi="n/a"> 
    <xsl:output indent="yes"/> 
    <xsl:template match="*"> 
     <output> 
      <xsl:value-of select="count(//Device[@xsi:type = 'EndDevice'])"/> 
     </output> 
    </xsl:template> 
</xsl:stylesheet> 

उत्पादन:

<?xml version="1.0" encoding="UTF-8"?> 
<output xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsi="n/a">4</output> 

मुझे लगता है कि यह XPathBuilder thats है कुछ कर रहा हूँ बात गलत है।

+1

सहमत हुए। यह XPathbuilder के साथ एक समस्या होने की संभावना है। मैंने Xalan, सैक्सन 6.5.5, सैक्सन HE 9.2.0.3 का उपयोग करके ओक्सिजन में एक्सएमएल/एक्सएसएलटी का परीक्षण किया और वांछित आउटपुट प्राप्त किया। –

3

एक test.xml में बचाया ऊपर XML का उपयोग और उपकरण http://kernowforsaxon.sourceforge.net/

declare namespace xsi="n/a"; 
count(doc('test.xml')//Device[@xsi:type = "EndDevice"]) 

सही उत्पादन का उत्पादन का उपयोग कर।

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