使用Xquery,如何在以下xml文档中的xquery表达式中嵌入变量。我有以下xml文档
<CD>
<TITLE>Picture book</TITLE>
<ARTIST>Simply Red</ARTIST>
<COUNTRY>EU</COUNTRY>
<COMPANY>Elektra</COMPANY>
<PRICE>7.20</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Red</TITLE>
<ARTIST>The Communards</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>London</COMPANY>
<PRICE>7.80</PRICE>
<YEAR>1987</YEAR>
</CD>
<CD>
<TITLE>Unchain my heart</TITLE>
<ARTIST>Joe Cocker</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>EMI</COMPANY>
<PRICE>8.20</PRICE>
<YEAR>1986</YEAR>
</CD>
我需要发出查询以返回所有带有YEAR&gt;的CD我希望将“where”子句的组件作为变量,我的意思是将YEAR > 1986
存储到三个变量中并使用查询中的变量,
在这里我到目前为止
String queryString =
"declare variable $field :=" +"YEAR"+";"+
"declare variable $operator :=" +">"+";"+
"declare variable $value :=" +"1986"+";"+
"declare variable $docName as xs:string external;" + sep +
"for $cat in doc($docName)/*/"+ "CD" +
"where $cat/$field $operator $value" +
"order by $cat/$field" +
"return $cat";
XQExpression expression = conn.createExpression();
expression.bindString(new QName("docName"), filename,
conn.createAtomicType(XQItemType.XQBASETYPE_STRING));
results = expression.executeQuery(queryString);
return results.getSequenceAsString(new Properties());
我的查询表达式并不完美,我认为我在使用变量时遇到了麻烦,任何人都可以帮我解决这个问题吗? 感谢
答案 0 :(得分:2)
XQuery(和XSLT / XPath)中的变量表示值,而不是程序文本的片段。也就是说,它不是宏语言 - 变量不能通过文本替换来起作用。
使用值的变量很简单:x = $ value。
使用变量作为元素名称并不太困难:* [name()= $ n] = $ value
但是不能为运营商使用变量。当你达到这个级别时,最好使用字符串连接将查询生成为字符串,然后编译并执行它。事实上,无论如何你似乎都在以字符串形式生成查询(我不会担心代码注入的风险)。