搜索整个文档时的XSLT性能

时间:2016-09-26 15:41:28

标签: xml xslt xpath

我有一个附有ID的XML文档,例如:

<Section>
    <Field Id="1">... content ...</Field>
    <Field Id="2">... content ...</Field>
    <Section>
        <Field Id="5">... content ...</Field>
        <Field Id="6">... content ...</Field>
        <Section>
            <Field Id="10">... content ...</Field>
            <Field Id="20">... content ...</Field>
        ...
        </Section>
     ...
     </Section>
...
</Section>

实际文档有许多嵌套的部分和字段。是否使用XPath表达式搜索特定的Id,例如:

 //Field[@Id=$vSearchId]

可能是一项昂贵的操作? $vSearchId此处表示持有Id搜索的XSL样式表中的变量。

是否有更有效的方法来执行此类查找,例如构建索引?我查看了xsl:key,但我不确定如何使用它来搜索整个文档。

3 个答案:

答案 0 :(得分:2)

  

我看了xsl:key,但我不确定如何使用它进行搜索   在整个文档中。

喜欢这个吗?

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:key name="fld" match="Field" use="@Id" />
<xsl:variable name="vSearchId">6</xsl:variable>

<xsl:template match="/">
    <xsl:copy-of select="key('fld', $vSearchId)"/>
</xsl:template>

</xsl:stylesheet>

答案 1 :(得分:1)

您可以定义一个键: <xsl:key name="id-register" match="Field" use="@Id"/>

之后,您可以使用此密钥处理具有特定ID的<Field>的出现次数:

<xsl:for-each select="key('id-register','10')"> <!-- Do Stuff --> </xsl:for-each>

答案 2 :(得分:1)

是否使用XPath表达式搜索特定的ID,例如:

 //Field[@Id=$vSearchId]

可能很贵?

是的,它可能很贵。但只有潜力。对于许多处理器,定义xsl:key并使用key()函数将加快此查询(通过创建索引)。但像Saxon-EE这样的具有智能优化器的处理器将自动构建索引,而无需您明确要求它。

相关问题