0

有源 XML:

<root>
      <element Key="card1_id">123</element>
      <element Key="card1_balance">500</element>
      <element Key="card2_id">456</element>
      <element Key="card2_balance">800</element>
      .............................................
      <element Key="card(n)_id">999</element>
      <element Key="card(n)_balance">8000</element>
</root>

其中 n - 牌的数量

使用 XSLT,我需要获取 HTML:

<b>Card 1:</b>   
  ID: 123 <br/> 
  Balance: 500 <br/>  

<b>Card 2:</b>   
  ID: 456<br/>  
  Balance: 800<br/> 
 ..................
<b>Card n:</b>   
  ID: 999<br/>  
  Balance: 8000<br/>

如何组织这样的分组?

4

2 回答 2

3

在 XSLT 1.0 中使用Muechian 分组:

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

  <xsl:key name="k1" match="element" use="translate(@Key, translate(@Key, '0123456789', ''), '')"/>

  <xsl:output method="html" indent="yes"/>

  <xsl:template match="root">
    <div>
      <xsl:apply-templates select="element[generate-id() = generate-id(key('k1', translate(@Key, translate(@Key, '0123456789', ''), ''))[1])]" mode="group"/>
    </div>
  </xsl:template>

  <xsl:template match="element" mode="group">
    <b>Card <xsl:value-of select="translate(@Key, translate(@Key, '0123456789', ''), '')"/>:</b>
    <xsl:apply-templates select="key('k1', translate(@Key, translate(@Key, '0123456789', ''), ''))"/>
  </xsl:template>

  <xsl:template match="element">
    <xsl:value-of select="concat(substring-after(., '_'), ': ', .)"/>
    <br/>
  </xsl:template>

</xsl:stylesheet>

使用该样式表 Saxon 6.5.5 转换

<root>
      <element Key="card1_id">123</element>
      <element Key="card1_balance">500</element>
      <element Key="card2_id">456</element>
      <element Key="card2_balance">800</element>
      .............................................
      <element Key="card3_id">999</element>
      <element Key="card3_balance">8000</element>
</root>

进入

<div><b>Card 1:</b>: 123<br>: 500<br><b>Card 2:</b>: 456<br>: 800<br><b>Card 3:</b>: 999<br>: 8000<br></div>
于 2012-03-16T16:44:22.447 回答
1

您没有说您使用的是 XSLT 1.0 还是 2.0。

此外,您本身并不需要分组来实现输出。

例如,下面会发出类似于你想要的,没有分组。现在,如果您的数据以不同的顺序出现,那么是的,您需要分组。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html"/>

<xsl:template match="/root/element[ends-with(@Key,'id')]">
 <b><xsl:value-of select="replace(@Key,'(.*)(\d.*)_id','$1 $2:')"/></b>   
  ID: <xsl:value-of select="."/> <br/> 
  Balance: <xsl:value-of select="following-sibling::element"/> <br/>
</xsl:template>

<xsl:template match="element"/>

</xsl:stylesheet>
于 2012-03-16T16:52:33.750 回答