0

java {"0","1","true","false"} にそのようなコレクションがあり、コレクション内に属性 'available' があるすべての本を選択したいと考えています。

XML ファイルの例:

<?xml version="1.0" encoding="UTF-8"?>
<books:booklist
    xmlns:books="http://univNaSpResolver/booklist"
    xmlns="http://univNaSpResolver/book"
    xmlns:fiction="http://univNaSpResolver/fictionbook">
    <science:book xmlns:science="http://univNaSpResolver/sciencebook">
        <title>Learning XPath</title>
        <author>Michael Schmidt</author>
        <available>1</available>
    </science:book>
    <fiction:book>
        <title>Faust I</title>
        <author>Johann Wolfgang von Goethe</author>
        <available>maybe</available>
    </fiction:book>
    <fiction:book>
        <title>Faust II</title>
        <author>Johann Wolfgang von Goethe</author>
        <available>true</available>
    </fiction:book>
</books:booklist>

contains 関数を使用するとこれができるようですが、リストを XPath (Java 用) のパラメーターとして使用する方法がわかりません。

ご協力いただきありがとうございます

4

2 に答える 2

0

XPathで使用可能なcontains(string1、string2)関数は、単なる文字列比較です。

string1にstring2が含まれている場合はtrueを返し、そうでない場合はfalseを返します。

述語はいつでもOR演算子で結合できます。

//science:book[available="true" or available="false" or available="1" or available="0"] |
//fiction:book[available="true" or available="false" or available="1" or available="0"]
于 2013-03-20T13:10:38.070 に答える
0

具体的なJavaコードについては説明できませんが、要素にXPath 1.0の値のリストまたはコレクションのいずれかが含まれているかどうかを確認するには、通常、リストまたはコレクションから、値に含まれていない区切り文字を使用して文字列を作成します(コレクションなど)。{"0","1","true","false"}になり|0|1|true|false|(ここで、区切り文字としてバー文字を選択しました|)、次に比較します//book[contains($list, concat('|', available, '|'))]

明らかに、入力は名前空間を使用するため、より複雑になります。その方法では、(少なくとも?)2つの異なる要素があり、available要素も名前空間にあります。

したがって、の名前空間マッピングを想定する とxmlns:science="http://univNaSpResolver/sciencebook"、XPathは次のようになります。xmlns:fiction="http://univNaSpResolver/fictionbook"xmlns:book="http://univNaSpResolver/book"

//science:book[contains('|0|1|true|false|', concat('|', book:available, '|'))] |
//fiction:book[contains('|0|1|true|false|', concat('|', book:available, '|'))]

もちろん、値の文字列をパラメータとして渡して、次のようにすることをお勧めします。

//science:book[contains($list, concat('|', book:available, '|'))] |
//fiction:book[contains($list, concat('|', book:available, '|'))]
于 2013-03-20T13:06:56.033 に答える