我需要做2件事。从一般xpath获取精确的xpath
- 验证XML文件中节点的值。
如果值对应,我需要更改它。
我已经有了一个复杂的对象的层次结构来完成这项工作。现在我面临一个有问题的案例。让我们来看一个例子:
<staticTag> <randomTag> <anotherRandomTag> <staticTag property="id"> <staticTag> VALUE </staticTag> </staticTag> </anotherRandomTag> </randomTag> </staticTag>
这发生n次在每个XMLFILE我要解析。这很容易
//staticTag[@property='id']/staticTag/text()
是的,它会返回给我所有我需要验证的值。问题是我没有精确的xpath来改变它的值,如果它对应我正在寻找的值。
如有必要,我可能会发布代码示例。所以tl; dr:有没有一种方法可以从一般的生成精确的xpath?像往常一样感谢你的时间。
我已经做了几个testHere是一个虚拟的XML,我找
<tag>
<ZDSJG>
<SJROT>X66P1</SJROT>
</ZDSJG>
<DNLVZ>
<SJROT>VV1EZ</SJROT>
</DNLVZ>
</tag>
我的Xpath上的表达是//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
将不尝试生成正确的Xpath
为什么不使用''staticTag [@ property ='id']“',没有前导'/'? - 最顶端的标记不匹配,因为它没有该属性。 – gaborsch
我有这个模式N次。在同一个XML文件中。而且我不需要更改所有这些N实例。只要该值与内存中的另一个匹配即可。 – drgn
我想你需要赶上带有属性的中间''(我想没有其他的节点具有'property =“id”'属性) - 你能做到吗?我们没有你的XML信息。 –
gaborsch