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

XSLT1.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 に答える