我想弄清楚应该如何对evalXPathToString
方法进行编码以允许我在最后使用text()
的xpath:
String xml = <xmlDoc><noele>junk</noele><valss>1.45</valss><other>junk2</other></xmlDoc>
assertThat(evalXPathToString(xml, "/xmlDoc/valss"), is("1.45"));
assertThat(evalXPathToString(xml, "/xmlDoc/noele"), is("junk"));
assertThat(evalXPathToString(xml, "/xmlDoc/other/text()"), is("junk2"));
vtd-xml版本2.13。
编辑我的内容:
autoPilot.selectXPath(xpath);
if(hasMoreElements(autoPilot)) {
int textIndex = vtdNav.getText() ;
if(textIndex != -1) {
return vtdNav.toNormalizedString(textIndex);
}
}
...但是最后的断言没有通过。
答案 0 :(得分:0)
当您使用xpath直接查询文本值(将text()作为最后一步,具体而言)时,您的断言代码中不需要额外的getText()调用。原因是'/xmlDoc/other'
已经 返回文本节点或-1。如果在该节点位置运行getText(),则始终为-1,因为您正在尝试获取文本节点的文本节点。
所以修正案是:
'/xmlDoc/other/text(),'
的xpath查询,然后测试is()的断言。你的逻辑将起作用vtdNav.comparetokenString()
的xpath查询并测试-1的返回值或直接检查字符串值。一个额外的性能增强建议:不需要vtd索引来进行字符串转换... vtdNav有一个函数数组,可以直接将vtd标记与字符串值进行比较...其中一个名为{{1} }