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在您使用它的上下文中,有一个由三个节点组成的节点集,并且节点集的字符串值是其第一个成员的值,因此您的表达式作为一个整体意味着“查找第一个 Book 子节点为 b1 的所有作者(不区分大小写)”。

相反,您需要类似的东西

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

“查找所有拥有值为 b1 的 Book 子项的所有作者(不区分大小写)

于 2012-10-08T12:08:38.653 回答