java - 如何为 Axiom XPath 设置变量上下文

标签 java xpath axiom

我想验证我的 xpath 参数

这是我的 xml

<parent>
  <a>
    <c>name1</c>
  </a>
    <b>name2</b>
</parent>

以下是我的java代码

    String xmlPayload="<parent><a><c>name1</c></a><b>name2</b></parent>";
    OMElement xmlOMOBject= AXIOMUtil.stringToOM(xmlPayload);
    String key1="//a";
    String key2="/c";
    SimpleVariableContext svc=new SimpleVariableContext();
    svc.setVariableValue("part1",key1);
    svc.setVariableValue("part2",key2);

    AXIOMXPath axiomxPath = new AXIOMXPath("$part1$part2");
    axiomxPath.setVariableContext(svc);
    System.out.println(axiomxPath.selectSingleNode(xmlOMOBject));

但是上面的代码给了我一个错误。

Exception in thread "main" org.jaxen.XPathSyntaxException: Unexpected '$'

如何设置上下文变量并正确评估 axiom xpath。

最佳答案

$part1$part2 不是有效的 XPath 表达式。 concat($part1, $part2) 是有效的,但它只会计算字符串 //a/c 而不会将 //a/c 计算为 XPath 表达式。我猜你想要类似 evaluate function in EXSLT 的东西(并使用 dyn:evaluate(concat($part1, $part2))),但我不确定 Jaxen 支持此函数,这仍然与构造 AXIOMXPath 具有相同的效果,如下所示:

AXIOMXPath axiomxPath = new AXIOMXPath(key1 + key2);

关于java - 如何为 Axiom XPath 设置变量上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30509680/

相关文章:

java - 使用 java mail api 发送邮件时出现 MailConnectException

java : how to obfuscate the account information in my application?

java - 当我需要 DocumentBuilder 时使用 SAX 解析器

java - 如何使用java从现有 keystore 生成csr

java - 使用 JAVA 从 HTML 中提取所有图像

java - 如何在 java 中使用 XPath/JsonPath 更改 json 文件中的值

xslt - 如何匹配XSL中包含字符串的属性?

java - org.apache.axiom.om 中的 "om"是什么意思?

java - 错误 : org. apache.axis2.AxisFault:请求中未指定方法

java - 如何将 apache.cfx.header 对象转换为 OMElement