java - 如何使用 XPath 设置空值?

标签 java xml xpath

使用这个 xml 示例:

<templateitem itemid="5">
   <templateitemdata>%ARN%</templateitemdata>
</templateitem>
<templateitem itemid="6">
   <templateitemdata></templateitemdata>
</templateitem>

我正在使用 XPath 获取和设置节点值。我用来获取节点的代码是:

private static Node ***getNode***(Document doc, String XPathQuery) throws XPathExpressionException
{
    XPath xpath = XPathFactory.newInstance().newXPath();
    XPathExpression expr = xpath.compile(XPathQuery);
    Object result = expr.evaluate(doc, XPathConstants.NODESET);
    NodeList nodes = (NodeList) result;
    if(nodes != null && nodes.getLength() >0)
        return nodes.item(0);
    throw new XPathExpressionException("No node list found for " + XPathQuery);
}

获取 %ARN% 值:“//templateitem[@itemid=5]/templateitemdata/text()”并使用 getNode 方法我可以获得节点,然后调用getNodeValue()。

除了获取该值外,我还想为“templateitem[@itemid=6]”设置 templateitemdata 值,因为它是空的。但是我使用的代码无法获取节点,因为它是空的。 result 为空。

您知道获取节点以便我设置值的方法吗?

最佳答案

您只需请求元素节点本身(而不是它的子文本节点):

//templateitem[@itemid=6]/templateitemdata

getNodeValue() 也适用于元素节点,在这两种情况下,在 XPath 中使用 text() 是完全多余的。

关于java - 如何使用 XPath 设置空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2736687/

相关文章:

java - HBase java 错误 - 预期 HEADER=HBas 但收到 HEADER=\x00\x00\x01\x0B

java - Java中简单多线程程序的奇怪问题

javascript - 在 jQuery 中查找/替换 HTML 标签之间的字符串?

xml - 将 XPath count() 与 contains() 一起使用

objective-c - 查找某个div的xpath

linux - 在linux 2.6.33-r2上安装JDK并设置路径

java - 如何在正则表达式中将十进制值与逗号和括号匹配?

.net - 在 XML 文件中保存转义字符 0x1b

android - View 在约束布局中不可见

xslt - 用于选择没有同名子子项的子项的 XPath