【问题标题】:concat() function XPath Evaluation fails while using with AutoPilot in VTD-XML在 VTD-XML 中与 AutoPilot 一起使用时,concat() 函数 XPath 评估失败
【发布时间】:2016-05-20 07:54:53
【问题描述】:

使用 VTD-XML 2.11 (Java) API,在简单文本或 xml 元素上评估 XPath 表达式 concat() 时,得到的结果不是 2.0,它会失败并出现以下异常:

Exception in thread "main" com.ximpleware.XPathEvalException:  Function Expr can't eval to node set 
    at com.ximpleware.FuncExpr.evalNodeSet(FuncExpr.java:1033)
    at com.ximpleware.AutoPilot.evalXPath(AutoPilot.java:876)

这是以下程序:

private static String getElementValue() throws XPathParseException, XPathEvalException, NavException {
    String value = null;

    VTDGen gen = new VTDGen();
    gen.setDoc(data.getBytes());
    gen.parse(false);

    VTDNav nav = gen.getNav();

    AutoPilot pilot = new AutoPilot(nav);
    pilot.selectXPath("concat(\"Hello\", \"Mr Buddy\")");

    int bufferIndex = NO_MATCH;
    if((bufferIndex = pilot.evalXPath()) != NO_MATCH) {
        value= nav.getXPathStringVal();
    }
    System.out.println(value);
} // end of getElementValue()

【问题讨论】:

  • 我想你可能想试试 evalXpathToString 方法...
  • 那我怎么能通过xpath
  • 如果您有任何示例如何连接两个 xpath 或一个 xpath + 常量值。
  • SelectXpath 是相同的,不同之处在于您如何评估 xpath.. 而不是使用 evalxpath,它假定返回一个 nodeset ,使用 evalxpath2string..
  • pilot.evalXPathToString();不接受任何参数,我的意思是 Xpath 值。

标签: java xml xpath concat vtd-xml


【解决方案1】:

这是我的代码,它对我来说似乎工作得很好......看看它,让我知道你的想法......

import com.ximpleware.*;
public class concatTest{
    public static void main(String s1[]) throws Exception {
        VTDGen vg= new VTDGen();
        String s = "<users><user><firstName>some </firstName><lastName> one</lastName></user></users>";
        vg.setDoc(s.getBytes());
        vg.parse(false);
        VTDNav vn = vg.getNav();
        AutoPilot ap = new AutoPilot();
        ap.selectXPath("concat('good', ' luck')");
        System.out.println(" concat output ==>"+ap.evalXPathToString());
        ap.selectXPath("concat(/, '')");
        ap.bind(vn);
        System.out.println(" concat output ==>"+ap.evalXPathToString());
    }

}

【讨论】:

  • 嗨,如果 xpath 值不匹配,我还想要一件事,我不想连接。我们将如何实现。
  • 你能具体点吗?不匹配是什么意思?有什么例子吗?
  • 例如 concat('Hello', /users/firstNames) 这里 firstNames xpath 不匹配结果是 Hello。我要问的是如果 xpath 不匹配我不想做 concat() 所以结果将为空或空。
  • 这个 xpath 是一定要完成的......如果有任何附加条件,在 xpath 1.0 中,这不能在表达式中完成,但您可以通过编程方式完成,即在表达式之外使用代码逻辑来实现这一点..如果你打开另一个问题,我可能会提交一个完整的答案......
猜你喜欢
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多