0

我正在尝试通过 C 程序对大小为 4 mb 的 xml 文件运行一些 XPath 查询。我还在计算吞吐量(xml 文件的大小除以解析 xml 文件所用的时间和运行查询所用的时间)虽然有一件事让我很困惑。当我运行以下 XPath 表达式时:

“//什么|//是//那个”

..我的吞吐量约为 700 兆比特/秒。但是当我接下来运行以下表达式时:

“什么|//是//那个”

...我的吞吐量约为 36 兆比特/秒。谁能向我解释为什么在第二个查询开头删除两个双斜杠会导致吞吐量显着下降?我真的很感激任何帮助。

4

1 回答 1

0

添加//到 XPath 意味着“从根开始并检查文档中的所有节点是否满足以下条件”。如果你删除它,它只希望检查当前节点。

例子:

<root>
    <A>
    </A>
    <D position="I'm here">
        <B>I'm inside D!</B>
        <C>So am I!</C>
    </D>
    <B>I'm not inside D.</B>
    <C>I'm not either.</C>
</root> 

如果我在这里应用 XPath //C,我的结果将是

<C>So am I!</C>

<C>I'm not either.</C>

但是如果我应用 XPath C,我的结果就是<C>So am I!</C>

//因此,即使您得到相同的结果,您也正在通过应用搜索​​整个文档。通过使用what|//is//that,如果 XPath 没有找到具有该名称的当前节点的子节点,它将停止搜索。随着//what|//is//that您正在寻找所有isthatwhat节点,这需要更长的时间。

如果您担心效率,请尽可能使用精确的路径(例如root/A/D/C,而不是//C

于 2013-01-10T19:51:13.120 回答