2015-05-24 8 views
5

मैं एक्सएमएल से एक्सक्यूएल का उपयोग फ़ंक्शन के साथ शुरू करने के साथ डेटा प्राप्त करना चाहता हूं।एक्सएमएल से डेटा प्राप्त करना Xquery का उपयोग कार्य के साथ शुरू होता है

data.xml

   <data><employee id=\"1\"><name value=\"vA-12\">A</name> <title id=\"2\">Manager</title></employee> 
        <employee id=\"2\"><name value=\"vC-12\">C</name><title id=\"2\">Manager</title></employee> 
        <employee id=\"2\"><name value=\"vB-12\">B</name><title id=\"2\">Manager</title></employee> 
      </data> 

अब मैं उस नाम जो कर्मचारी @ आईडी = शीर्षक @ आईडी और नाम @ मान 'कुलपति' से शुरू होता है लाने के लिए चाहते हैं।

मैं इस XQuery लिखा है के लिए same.Please नीचे देखें लेकिन हो रही त्रुटि-

for $x in /data/employee where $x/@id=$x/title/@id and [fn:starts-with($x/name/@value,vC)] return data($x/name) 

इस

Error on line 1 column 55 
    XPST0003 XQuery syntax error near #.../title/@id and [fn:starts-with#: 
    Unexpected token "[" in path expression 
net.sf.saxon.s9api.SaxonApiException: Unexpected token "[" in path expression 
    at net.sf.saxon.s9api.XQueryCompiler.compile(XQueryCompiler.java:544) 
    at Xml.process(Xml.java:46) 
    at Xml.main(Xml.java:30) 
Caused by: net.sf.saxon.trans.XPathException: Unexpected token "[" in path expression 
    at net.sf.saxon.query.XQueryParser.grumble(XQueryParser.java:479) 
    at net.sf.saxon.expr.parser.XPathParser.grumble(XPathParser.java:221) 
+2

आपकी त्रुटि क्या है? – Andrew

+0

@Andrew ने जोड़ा गया त्रुटि pls ऊपर देखें –

+0

क्या आपका एक्सएमएल अच्छी तरह से स्वरूपित नहीं है (विशेषता मानों में भाग जाता है)? –

उत्तर

3

starts-with() समारोह दो पैरामीटर उम्मीद त्रुटि- है। मैं विशेष रूप से सेक्सन से परिचित नहीं हूँ, लेकिन सामान्य XQuery में आप इस तरह से कर सकते हैं: अपने प्रयास किया क्वेरी में के रूप में for खंड में

for $x in /data/employee[@id=title/@id and name[starts-with(@value,'vC')]] 
return data($x/name) 

या विधेय के बजाय where खंड का उपयोग कर,:

for $x in /data/employee 
where $x/@id=$x/title/@id and $x/name/starts-with(@value,'vC') 
return data($x/name) 
+1

के लिए आपको बहुत बहुत धन्यवाद, उत्तर के लिए आपको बहुत बहुत धन्यवाद। –

1

बस इस छोटे और सरल XPath 2.0 एक लाइनर का उपयोग करें:

/*/employee[@id eq title/@id and starts-with(name/@value, 'vC')]/data(name) 
0

अपने सटीक पर निर्भर करता है आवश्यकताएं, आपको इसकी आवश्यकता हो सकती है (मैं आपको मतभेदों से गुज़रने देता हूं, लेकिन मूल रूप से यह के साथ vC से शुरू होने वाले सभी नामों का चयन करता है, जहां अन्य समाधान यहां कम से कम vC से शुरू होने वाले सभी कर्मचारियों के सभी नामों का चयन करते हैं):

/data/employee[@id eq title/@id]/name[starts-with(@value, 'vC')]/data(.) 
संबंधित मुद्दे