【发布时间】:2022-01-04 10:56:13
【问题描述】:
我们可以在 XPath 中使用 tokenize 函数吗
我用来处理 XSLT 和 XML 文件的一般 java 代码是:
XPath xPath = XPathFactory.newInstance().newXPath();
InputSource inputXML = new InputSource(new StringReader(xml));
String expression = "/root/customer/personalDetails[age=tokenize('20|30','|')]/name";
boolean evaluate1 = (boolean) xPath.compile(expression).evaluate(inputXML, XPathConstants.BOOLEAN);
XML :-
<?xml version="1.0" encoding="ISO-8859-15"?>
<root>
<customer>
<personalDetails>
<name>ABC</name>
<value>20</value>
</personalDetails>
<personalDetails>
<name>XYZ</name>
<value>21</value>
</personalDetails>
<personalDetails>
<name>PQR</name>
<value>30</value>
</personalDetails>
</customer>
</root>
预期响应:- ABC,PQR
【问题讨论】:
-
您的 xslt 与 xml 不匹配(
agevsvalue)。关于tokenize:tokenize返回一个字符串序列,你真的可以用=比较吗? -
tokenize是 XPath 2 及更高版本的一部分,因此倾向于仅实现 XPath 1 的默认 JAXP XPath API 不支持它。但是,Saxon 9 或 10 可以在 Java 中使用,以支持 XPath 3。不建议使用 JAXP API 执行此操作,特别是如果您想要不适合该 API 的结果。您的代码不清楚,似乎假设 XPath 2,您只想要/root/customer/personalDetails[value=(20, 30)]/name但当然作为节点列表而不是布尔值。
标签: java xml xslt xpath xslt-3.0