【问题标题】:Returning multiple attributes from a document lookup in XSLT/XPATH从 XSLT/XPATH 中的文档查找返回多个属性
【发布时间】:2017-07-12 13:26:49
【问题描述】:

我有一个 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"/>

【问题讨论】:

    标签: xslt-2.0 xpath-2.0


    【解决方案1】:

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

            <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>
    

    等等。 (作为旁注,我建议在xsl:attribute 上简单地使用select 属性,例如&lt;xsl:attribute name="Oracle_Routing" select="$referenced-node/@OracleSchema"/&gt;)。

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

    【讨论】:

    • 非常感谢。我测试了第二个“as=attribute”,我注意到索引与查找中的属性顺序不对应。索引顺序似乎映射到它们在查找文档中的顺序?
    • 如果你改用&lt;xsl:variable name="atts" as="attribute()*" select="for $e in key('table-lookup', $curr_key, $LookupDoc) return ($e/@OracleSchema, $e/@DestinationTable, $e/@ColumnName)"/&gt;,你会得到你想要的订单吗?您可能希望使用一些示例数据来编辑您的问题以演示问题。 / 按文档顺序对右侧进行排序,因此根据您的输入数据(该键调用是否找到了几个元素?)这两种方法可能会得到不同的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2012-02-10
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2014-03-13
    相关资源
    最近更新 更多