0

使用 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 > 1986 的所有 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()); 

我的查询表达式不完美,我想我在使用变量时遇到了麻烦,有人可以帮我解决这个问题吗?谢谢

4

1 回答 1

2

XQuery(和 XSLT/XPath)中的变量表示值,而不是程序文本的片段。也就是说,它不是一种宏语言——变量不能通过文本替换起作用。

使用变量作为值很简单:x = $value。

为元素名称使用变量并不难:*[name()=$n] = $value

但是不可能为运算符使用变量。当您达到这个级别时,最好使用字符串连接将查询生成为字符串,然后编译并执行它。实际上,您似乎无论如何都将查询生成为字符串(不用担心代码注入的风险,我明白了)。

于 2012-06-22T07:01:33.253 回答