我需要做两件事。
验证 XML 文件中节点的值。
如果值对应,我需要更改它。
我已经有一个复杂的对象层次结构来完成这项工作。现在我面临一个有问题的案例。让我们看一个例子:
<staticTag> <randomTag> <anotherRandomTag> <staticTag property="id"> <staticTag> VALUE </staticTag> </staticTag> </anotherRandomTag> </randomTag> </staticTag>
这在我必须解析的每个 XMLFile 中都发生了 n 次。这很容易
//staticTag[@property='id']/staticTag/text()
是的,它将返回给我我需要验证的所有值。问题是我没有精确的 xpath 来更改值,如果它对应于我正在寻找的值。
如有必要,我可能会发布代码示例。所以tl; dr:有没有办法从一般的xpath生成精确的xpath?像往常一样感谢您的宝贵时间。
我已经做了一些测试这里是一个虚拟 xml
<tag>
<ZDSJG>
<SJROT>X66P1</SJROT>
</ZDSJG>
<DNLVZ>
<SJROT>VV1EZ</SJROT>
</DNLVZ>
</tag>
我正在寻找的 Xpath xpression 是//SJROT
使用我编写的函数,我可以从第一个节点生成这个 XPATH:/#document/tag/ZDSJG/SJROT/#text
不幸的是,xpath 表达式//SJROT
没有返回具有此名称的第二个节点。这里有一段代码用于查找提供的 Xpath 表达式
XPathExpression expression = xpath.compile(expressionXPath);
NodeList result = (NodeList) expression.evaluate(document, XPathConstants.NODE);
List<String> generatedXpath = Lists.newArrayList();
for (int i = 0; i < result.getLength(); i++) {
generatedXpath.add(getXPath(result.item(i)));
}
return generatedXpath;
另一个编辑:我修复了我的代码,我不得不使用NODESET
而不是NODE
Will no try to generate the proper Xpath