0

私はこのようなXMLを持っています

<Authors>
<Author name='Some Author'>
<Book>B1</Book>
<Book>B2</Book>
<Book>B3</Book>
</Author>
</Authors>

Book を使用してこの xml に対して xpath クエリを実行し、著者名を表示したいのですが、xpath クエリは大文字と小文字を区別しない必要があります。

使ってみた

Author[translate(Book,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='b1'

しかし、このクエリは、b1 でクエリを実行している場合にのみ値を返します。クエリが b2 または b3 を使用している場合、null が返されます。

私はJavaでこれをやっています:

XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
XPathExpression xPathExpression = xPath.compile(
      "Authors/Author[translate(Book,'ABCDEFGHIJKLMNOPQRSTUVWXYZ'," +
      "'abcd‌​efghijklmnopqrstuvwxyz')='b2']");
ret_nodelist = (NodeList) xPathExpression.evaluate(doc,XPathConstants.NODESET);
4

1 に答える 1

3

このtranslate関数は文字列を操作するため、最初に引数を文字列に変換し、次に結果を変換します。Book使用しているコンテキストでは、3 つのノードのノード セットがあり、ノード セットの文字列値はその最初のメンバーの値であるため、式全体は「最初の Book 子が b1 であるすべての Authors を検索する」ことを意味します(大文字小文字を区別しません)"。

代わりに、次のようなものが必要です

Author[Book[translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='b1']]

「値が b1 (大文字と小文字を区別しない) である Book 子を持つすべての Authors を検索する」

于 2012-10-08T12:08:38.653 に答える