如何使用 XSLT 3.0 为地图循环并生成键?
How can I loop and generate keys for maps with XSLT 3.0?
我试图构建一张新地图。在我的来源 xml 中,我有很多产品(产品数据和 ID)。像产品这样的key怎么生成?
目标是使用 XSLT 从 XML 到 XML 的转换。我的想法是创建一个地图,然后在下一步中调用用于处理我需要的特定产品数据的键。所以我需要知道使用地图是否可行,或者是否有其他解决方案?
来源示例 XML
<?xml version="1.0" encoding="UTF-8"?>
<root>
<row>
<id>102</id>
<product>Lenovo 1234</product>
<productfamily>laptop</productfamily>
</row>
<row>
.....
XSLT
<xsl:variable name="val" as="map(xs:integer, xs:integer)">
<xsl:map>
<xsl:for-each select="//id">
<xsl:map-entry key="" select="."/>
</xsl:map>
</xsl:variable>
<xsl:template match="/">
<xsl:value-of select="map:get($val , 102)"/>
</xsl:template>
您可以根据数据中的简单函数关系创建地图
<xsl:variable name="index" as="map(*)">
<xsl:map>
<xsl:for-each select="//x">
<xsl:map-entry key=".//@id" select="."/>
</xsl:for-each>
</xsl:map>
</xsl:variable>
或者如果您愿意
<xsl:variable name="index" as="map(*)"
select="map:merge(//x ! map:entry(.//@id, .))"/>
我试图构建一张新地图。在我的来源 xml 中,我有很多产品(产品数据和 ID)。像产品这样的key怎么生成?
目标是使用 XSLT 从 XML 到 XML 的转换。我的想法是创建一个地图,然后在下一步中调用用于处理我需要的特定产品数据的键。所以我需要知道使用地图是否可行,或者是否有其他解决方案?
来源示例 XML
<?xml version="1.0" encoding="UTF-8"?>
<root>
<row>
<id>102</id>
<product>Lenovo 1234</product>
<productfamily>laptop</productfamily>
</row>
<row>
.....
XSLT
<xsl:variable name="val" as="map(xs:integer, xs:integer)">
<xsl:map>
<xsl:for-each select="//id">
<xsl:map-entry key="" select="."/>
</xsl:map>
</xsl:variable>
<xsl:template match="/">
<xsl:value-of select="map:get($val , 102)"/>
</xsl:template>
您可以根据数据中的简单函数关系创建地图
<xsl:variable name="index" as="map(*)">
<xsl:map>
<xsl:for-each select="//x">
<xsl:map-entry key=".//@id" select="."/>
</xsl:for-each>
</xsl:map>
</xsl:variable>
或者如果您愿意
<xsl:variable name="index" as="map(*)"
select="map:merge(//x ! map:entry(.//@id, .))"/>