如何使用 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, .))"/>