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のですが、3 つの変数に格納し、クエリで変数を使用することを意味します。これまで持っている

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 に答える