【问题标题】:In libxml2, what is the importance of Xpath context, does the context build an index that should be re-used?在libxml2中,Xpath上下文的重要性是什么,上下文是否构建了一个应该被重用的索引?
【发布时间】:2021-08-30 11:01:11
【问题描述】:

这是一个最佳实践问题。为 Xpath 搜索创建上下文的开销是否建议尽可能频繁地重用 Xpath 上下文?由于我在 LabVIEW 中工作,因此我的代码在协调关闭上下文时会受到可读性的影响,因为它是一个多线程环境。

归结为,Xpath 查询索引是在上下文中构建的,还是在 xmlXPathEval() 调用中构建的索引,以便在后续调用中使用?我可以或应该并行使用 Xpath 上下文吗? 文档表明并行使用是安全的,但没有解决索引重用问题。

为了可读性和性能,我是否应该编写一个 Xpath 表达式,将我的所有结果组合成一个基于 CSV 的字符串?

【问题讨论】:

    标签: xpath libxml2 labview


    【解决方案1】:

    XPath 上下文不能由多个线程共享。它也不存储有关评估表达式的任何信息。您可以(并且应该)使用相同的上下文评估不同的表达式。理想情况下,每个线程都有一个上下文。

    如果您关心性能,使用xmlXPathCompile 预编译您的XPath 表达式并使用xmlXPathCompiledEval 评估它们很重要。 (也许这就是“构建索引”的意思?)代表编译表达式的xmlXPathCompExprPtr 可以跨线程共享。

    【讨论】:

    • 谢谢。当我说“建立索引”时,我认为索引是在 libxml2 中的某个地方使用的——Xpath 查询不仅仅是对信息的线性搜索。我认为编译 Xpath 表达式只有在我们多次使用它时才有用。
    • @DannyHolstein 1. 不,不涉及索引。 2. 是的,如果你只对一个表达式求值一次,你不会从编译它中得到任何好处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2013-11-24
    相关资源
    最近更新 更多