如何使用XSLT 3.0循环并为地图生成密钥?

时间:2019-01-04 23:03:02

标签: xslt xslt-3.0

我试图绘制一张新地图。在我的源xml中,我有很多产品(产品数据和ID)。如何生成像产品这样的密钥?

目标是从XML到XSLT的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>

1 个答案:

答案 0 :(得分:1)

要根据数据中的简单功能关系创建地图

<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, .))"/>