从xml中获取数据使用Xquery,以函数开头

Rah*_*ray 5 java xml xquery

我想从xml中获取数据使用Xquery with functions with function.

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>
Run Code Online (Sandbox Code Playgroud)

现在我想获取具有employee @ id = title @ id且name @ value以'vC'开头的名称.

我已经为此写了这个xquery.请看下面但是得到错误 -

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

这是错误 -

    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)
Run Code Online (Sandbox Code Playgroud)

har*_*r07 3

starts-with()函数需要两个参数。我对 Saxon 不太熟悉,但一般来说 xquery 你可以这样做:

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

或使用where子句而不是for子句中的谓词,如您尝试的查询所示:

for $x in /data/employee
where $x/@id=$x/title/@id and $x/name/starts-with(@value,'vC')
return data($x/name)
Run Code Online (Sandbox Code Playgroud)