当前位置: 首页 > 面试题库 >

Android-XPath评估速度非常慢

程举
2023-03-14
问题内容

我正在XPath查询XML-file有关的信息100KB

我正在迭代一个数组,并查询列表中的每个值。

不幸的是 ,在调试器下, 单个查询大约需要3-4秒,而 在禁用调试器的情况下, 查询时间要 短一些。

任何想法为什么这么慢?我使用Galaxy S2进行测试。

这是我的代码:

XPath xpath = XPathFactory.newInstance().newXPath();
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
builderFactory.setNamespaceAware(true);
DocumentBuilder builder = builderFactory.newDocumentBuilder();

Document document = builder.parse(new File(file_on_internal_sd_url)));

int size = mPrefs.getInt("no_ids", 0);
for(int i=0;i<size;i++) {
    String id= mPrefs.getString("id_" + i, null);
    String expression = "/tag1/tag2[@id = '" + id+ "']";
    NodeList nodes = (NodeList) xpath.evaluate(expression, document, XPathConstants.NODESET);
    if(nodes.getLength()>0) {
        myElements.add((Element)nodes.item(0));
    }
}

更新资料

当我离开时,XPathConstants.NODESET评估很快就完成了,但是我没有得到NodeList。它返回一个空字符串


问题答案:

感谢@nvrmnd我尝试了一下,发现了一种更好的解析器:

VTD-XML

这是开发者的例子。

但是这个教程更好…

希望这能帮助像我一样沮丧的任何人…



 类似资料:
  • 问题内容: 是否有任何针对生产的准备就绪的库,用于针对提供的xml文档流XPath表达式评估?我的调查表明,大多数现有解决方案都在评估xpath表达式之前将整个DOM树加载到内存中。 问题答案: 鉴于XPath语法允许:对于完整的XPath实现,这是否可行? 和 这意味着提前要求?也就是说,无论如何,从特定节点开始,您都将不得不加载文档的其余部分。 Nux库(特别是StreamingPathFil

  • 问题内容: 我面临一个非常奇怪的问题:使用Redis时,我的写入速度非常糟糕(在理想情况下,写入速度应该接近RAM上的写入速度)。 这是我的基准: 是生成随机字符串的类(arg是字符串长度) 以下是几个结果: [写入] nb:100000 |时间:4.408319378 |速度:0.713905907055318 MB / s [写入] nb:100000 |时间:4.4139469070553

  • 问题内容: 我已经开发了一个用户批量上传模块。有两种情况,当数据库有零条记录时,我批量上传了20000条记录。大约需要5个小时。但是,当数据库已经有大约30 000条记录时,上传速度将非常缓慢。上载2万条记录大约需要11个小时。我只是通过fgetcsv方法读取CSV文件。 下面是运行的查询。(我正在使用Yii框架) 如果存在,请更新用户: 如果用户不存在,请插入新记录。 表引擎类型为MYISAM。

  • 问题内容: 我正在尝试以下代码,该代码向RDD中的每一行添加一个数字,并使用PySpark返回RDD列表。 输入文件(sample.txt)中的内容为: 我期待这样的输出(将rdd中的数字分别添加0、1、2): 而实际输出是: 这意味着无论 范围(4) 为何,该理解仅将值3用于变量i 。 为什么会发生这种现象? 问题答案: 它的发生是由于Python的后期绑定,而不是特定于(Py)Spark的。将

  • 问题内容: 我正在尝试在Python3中使用。这是我正在使用的一些代码: 但是,由于在Python3中返回了迭代器,因此该代码在Python3中不起作用(但在Python2中可以正常工作,因为该版本的always返回a ) 我当前的解决方案是在迭代器上添加一个函数调用以强制求值。但这似乎很奇怪(我不在乎返回值,为什么要将迭代器转换为列表?) 有更好的解决方案吗? 问题答案: 当您对返回的值不感兴趣

  • 问题内容: 我正在尝试通过使用JAP和HIBERNATE向SQL Server 2008 R2插入一些数据。一切都“正常”,除了它非常慢。要插入20000行,大约需要45秒,而C#脚本大约需要不到1秒。 这个领域的任何资深人士都可以提供帮助吗?我会很感激。 更新:从下面的答案中得到了一些很好的建议,但仍然无法按预期工作。速度是一样的。 这是更新的persistence.xml: 这是更新的代码部分