【问题标题】:vtd-xml xpath, how to use variable expression?vtd-xml xpath,如何使用变量表达式?
【发布时间】:2015-05-17 14:14:15
【问题描述】:

我正在尝试从 xml 获取与用户输入字符串匹配的特定单词的定义:

<?xml version="1.0" encoding="UTF-8" ?>
<diction>
<article>
<key>a</key>
<definition>
    ένας, μια, μία, ένα
</definition>
</article>
<article>
<key>a</key>
<definition>
α (στερητικό)
</definition>
</article>
<article>
<key>all</key>
<definition>
όλος, όλη, όλο
</definition>
</article>
<article>
<key>a.m</key>
<definition>
π.μ., πρωί
</definition>
</article>
<article>
<key>base</key>
<definition>
base
</definition>
</article>
</diction>

代码:

ap.declareVariableExpr("myexpr", xmlInput.getText().toString().replaceAll("\\s+$", ""));

ap.selectXPath("/diction/article/key[local-name()=string($myexpr)]");
//ap.evalXPathToString();
//ap.selectXPath("/diction/article/key");
ap.bind(vn);

int i;
while ((i=ap.evalXPath()) !=-1){
    i=vn.getText();
    vn.push();
    if(vn.toElement(VTDNav.NEXT_SIBLING, "definition")) {
        int j = vn.getText();
        if (j != -1)

        parsedData=parsedData+"word: " +        vn.toNormalizedString(i) + "\n"
        + "definition: " + vn.toNormalizedString(j) +"\n";
        Log.i("first", parsedData);
    }
    vn.pop();
}
ap.resetXPath();

上面的代码给了我所有的单词/定义,而不仅仅是那些与输入字符串匹配的。 xpath 表达式是否正确?我做错了什么?

【问题讨论】:

  • 你能给我们提供一个用户输入的例子以及它如何与xml中的单词匹配吗?
  • 例如,用户在 xmlInput 编辑文本中输入单词“base”。我将其声明为“myexpr”变量以在 selectXPath 中使用它,因此仅获取“base”的定义。我已经用 sax xml 解析器完成了这个,但是速度很慢。

标签: java xml xpath android-xml vtd-xml


【解决方案1】:

AutoPilot 中有一个名为 declareVariableExpression() 的函数,允许您声明变量表达式。

【讨论】:

  • 我正在使用这个功能(见上文),但我没有得到想要的结果。最近几天我搜索了很多关于 vtd-xml 和 xpath 的内容,但我没有找到任何适合我的案例。有一些相关的教程,但使用数字,而不是字符串。所以我将xml文件导入sqlite数据库,我会尝试这种方式,这可能比xml解析更快(我的文件是6MB)。到目前为止,我根本没有使用过 xml 解析,而且我最想使用它。但是我发现很难操作 vtd-xml 并且 sax 对于我的情况来说非常慢(为此我搜索并找到了 vtd-xml)。
  • 您的 xmlInput 字符串中有什么内容?
  • 我看了你的代码,你在解析xml文件的时候启用了命名空间吗?
  • 我放弃了 vtd-xml,因为数据库的方式给出的结果非常快,以防将来对其他人有帮助,不,我没有。所以也许这就是问题所在。
猜你喜欢
  • 1970-01-01
  • 2016-10-03
  • 2012-04-09
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 1970-01-01
相关资源
最近更新 更多