正在从 xml 获取数据 将 Xquery 与 starts with 函数结合使用
Fetching data from xml Using Xquery with starts with function
我想从 xml 使用 Xquery with starts with 函数获取数据。
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>
现在我想获取 employee@id=title@id 且 name@value 以 'vC' 开头的名称。
我已经为 same.Please 编写了这个 xquery,见下文但出现错误 -
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)
starts-with()
函数需要两个参数。我不是特别熟悉 Saxon,但一般来说,您可以这样做 xquery :
for $x in /data/employee[@id=title/@id and name[starts-with(@value,'vC')]]
return data($x/name)
或在 for
子句中使用 where
子句而不是谓词,如您尝试的查询:
for $x in /data/employee
where $x/@id=$x/title/@id and $x/name/starts-with(@value,'vC')
return data($x/name)
只需使用这个更短更简单的 XPath 2.0 单行代码:
/*/employee[@id eq title/@id and starts-with(name/@value, 'vC')]/data(name)
根据您的具体要求,您可能需要这个(我让您了解不同之处,但基本上它 select 都是 @value
以 vC
开头的名称,这里的其他解决方案 select 所有员工的所有姓名至少以 vC
开头):
/data/employee[@id eq title/@id]/name[starts-with(@value, 'vC')]/data(.)
我想从 xml 使用 Xquery with starts with 函数获取数据。
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>
现在我想获取 employee@id=title@id 且 name@value 以 'vC' 开头的名称。
我已经为 same.Please 编写了这个 xquery,见下文但出现错误 -
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)
starts-with()
函数需要两个参数。我不是特别熟悉 Saxon,但一般来说,您可以这样做 xquery :
for $x in /data/employee[@id=title/@id and name[starts-with(@value,'vC')]]
return data($x/name)
或在 for
子句中使用 where
子句而不是谓词,如您尝试的查询:
for $x in /data/employee
where $x/@id=$x/title/@id and $x/name/starts-with(@value,'vC')
return data($x/name)
只需使用这个更短更简单的 XPath 2.0 单行代码:
/*/employee[@id eq title/@id and starts-with(name/@value, 'vC')]/data(name)
根据您的具体要求,您可能需要这个(我让您了解不同之处,但基本上它 select 都是 @value
以 vC
开头的名称,这里的其他解决方案 select 所有员工的所有姓名至少以 vC
开头):
/data/employee[@id eq title/@id]/name[starts-with(@value, 'vC')]/data(.)