从XSLT / XPATH中的文档查找返回多个属性

时间:2017-07-12 13:26:50

标签: xslt-2.0 xpath-2.0

我有一个XML查找文档,希望尝试使其执行起来更快一些。我反复查找文档以返回不同的属性,可以在单个查找中返回所有属性并只解析返回的值?示例代码:

            <xsl:attribute name="Oracle_Routing">
                <xsl:value-of select="key('table-lookup', $curr_key, $LookupDoc)/@OracleSchema"/>
            </xsl:attribute>
            <xsl:attribute name="TableName">
                <xsl:value-of
                select="key('table-lookup', $curr_key, $LookupDoc)/@DestinationTable"/>
            </xsl:attribute>
            <xsl:variable name="Column"
            select="key('table-lookup', $curr_key, $LookupDoc)/@ColumnName"/>

1 个答案:

答案 0 :(得分:0)

您当然可以存储<xsl:variable name="referenced-node" select="key('table-lookup', $curr_key, $LookupDoc)"/>,然后使用例如

        <xsl:attribute name="Oracle_Routing">
            <xsl:value-of select="$referenced-node/@OracleSchema"/>
        </xsl:attribute>

而不是

        <xsl:attribute name="Oracle_Routing">
            <xsl:value-of select="key('table-lookup', $curr_key, $LookupDoc)/@OracleSchema"/>
        </xsl:attribute>

等等。 (作为旁注,我建议您只使用select上的xsl:attribute属性,例如<xsl:attribute name="Oracle_Routing" select="$referenced-node/@OracleSchema"/>)。

如果需要,您还可以存储所有三个属性,例如: <xsl:variable name="atts" as="attribute()*" select="key('table-lookup', $curr_key, $LookupDoc)/(@OracleSchema, @DestinationTable, @ColumnName)"/>然后使用例如<xsl:attribute name="Oracle_Routing" select="$atts[1]"/>如果添加或删除属性并且索引更改,则需要两次代码更改。