gpt4 book ai didi

document - XSLT 1.0 如何使用 xsl :key with document() function

转载 作者:行者123 更新时间:2023-12-04 17:23:45 28 4
gpt4 key购买 nike

我正在尝试使用 xsl:key 使用 XSL document() 函数在外部 XML 文档中查找项目。如果我不使用 document(),而是合并两个 XML 文件(在 C# 中使用 XmlDocument),我就能让 xsl:key 部分工作。然而,这两个 XML 文件都非常大,在某些情况下我开始出现“内存不足”错误。我还需要能够使用 xls:key,否则这个过程需要几个小时。

在 XSLT 2.0 中,我相信你可以这样做:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="lookupDoc" select="document('CodeDescriptions.xml')" />
<xsl:key name="LookupDescriptionByCode" match="Code/@description" use="../@code" />

<xsl:template match="ItemCode">
<xsl:call-template name="MakeSpanForCode">
<xsl:with-param name="code" select="text()" />
</xsl:call-template>
</xsl:template>

<xsl:template name="MakeSpanForCode">
<xsl:param name="code" />
<xsl:element name="span">
<xsl:attribute name="title">
<xsl:value-of select="$lookupDoc/key('LookupDescriptionByCode', $code)" />
</xsl:attribute>
<xsl:value-of select="$code" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>

但是,您如何在 XSLT 1.0 中完成此操作?

最佳答案

你有两种可能:

没有 key

<xsl:template name="MakeSpanForCode">
<xsl:param name="code" />

<xsl:element name="span">
<xsl:attribute name="title">
<xsl:value-of select="$lookupDoc/*/Code[@code = $code]/@description" />
</xsl:attribute>
<xsl:value-of select="$code" />
</xsl:element>
</xsl:template>

带 key

键定义适用于所有文档,但您需要在使用 key() 函数之前更改上下文节点:

<xsl:template name="MakeSpanForCode">
<xsl:param name="code" />

<xsl:element name="span">
<xsl:attribute name="title">
<!-- trick: change context node to external document -->
<xsl:for-each select="$lookupDoc">
<xsl:value-of select="key('LookupDescriptionByCode', $code)"/>
</xsl:for-each>
</xsl:attribute>
<xsl:value-of select="$code" />
</xsl:element>
</xsl:template>

另请参阅来自 Mike Kay 的两个很棒的邮件列表答案和 Jeni Tennison关于这个话题

关于document - XSLT 1.0 如何使用 xsl :key with document() function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14841059/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com