最后是否带有text()的vtd-xml evalXPathToString

时间:2016-06-08 09:01:42

标签: java xml xpath vtd-xml

我想弄清楚应该如何对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);
    }
}

...但是最后的断言没有通过。

1 个答案:

答案 0 :(得分:0)

当您使用xpath直接查询文本值(将text()作为最后一步,具体而言)时,您的断言代码中不需要额外的getText()调用。原因是'/xmlDoc/other' 已经 返回文本节点或-1。如果在该节点位置运行getText(),则始终为-1,因为您正在尝试获取文本节点的文本节点。

所以修正案是:

  1. 运行'/xmlDoc/other/text(),'的xpath查询,然后测试is()的断言。你的逻辑将起作用
  2. 运行vtdNav.comparetokenString()的xpath查询并测试-1的返回值或直接检查字符串值。
  3. 一个额外的性能增强建议:不需要vtd索引来进行字符串转换... vtdNav有一个函数数组,可以直接将vtd标记与字符串值进行比较...其中一个名为{{1} }