使用XSL模板转换XML

时间:2016-12-01 21:16:33

标签: xml xslt

我需要使用XSL模板转换以下XML结构输入。

<?xml version="1.0" encoding="Windows-1252" standalone="no"?>
<ECG>
  <R000>4</R000>
  <R001>
    <A01>R1 A1 Data</A01>
    <A02>R1 A2 Data</A02>
    <A03>R2 A3 Data</A03>
  </R001>
  <R002>
    <A01>R2 A1 Data</A01>
    <A02>R2 A2 Data</A02>
    <A03>R2 A3 Data</A03>
  </R002>
  <R003>
    <A01>R3 A1 Data</A01>
    <A02>R3 A2 Data</A02>
    <A03>R3 A3 Data</A03>
  </R003>
  <R004>
    <A01>R4 A1 Data</A01>
    <A02>R4 A2 Data</A02>
    <A03>R4 A3 Data</A03>
  </R004>
</ECG>

标记R000确定XML将包含多少RXXX个寄存器。我们的想法是使用XSL将XML转换为以下输出。在这种情况下,我将其应用于四个R000值。想法是在输入中使用随机数,因此它将处理n个寄存器。 A01A02A03标记将始终存在。只有RXXX数字是可变的。

<?xml version="1.0" encoding="Windows-1252" standalone="no"?>
<input>
  <data>
    <registry DATA1 = "R1 A1 Data" DATA2 = "R1 A2 Data" DATA3 = "R1 A3 Data"/>
    <registry DATA1 = "R2 A1 Data" DATA2 = "R2 A2 Data" DATA3 = "R2 A3 Data"/>
    <registry DATA1 = "R3 A1 Data" DATA2 = "R3 A2 Data" DATA3 = "R3 A3 Data"/>
    <registry DATA1 = "R4 A1 Data" DATA2 = "R4 A2 Data" DATA3 = "R4 A3 Data"/>
  </data>
</input>

我试过跟随xsl:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:template match="/">
    <xsl:element name="input" >
     <xsl:element name="data" >
       <xsl:element name="registry" >
        <xsl:attribute name="DATA1">
          <xsl:value-of select="ECG/R001/A01"/>
        </xsl:attribute>
        <xsl:attribute name="DATA2">
          <xsl:value-of select="ECG/R001/A02"/>
        </xsl:attribute>
        <xsl:attribute name="DATA3">
          <xsl:value-of select="ECG/R001/A03"/>
        </xsl:attribute>
      </xsl:element>
      <xsl:element name="registry" >
        <xsl:attribute name="DATA1">
          <xsl:value-of select="ECG/R002/A01"/>
        </xsl:attribute>
        <xsl:attribute name="DATA2">
          <xsl:value-of select="ECG/R002/A02"/>
        </xsl:attribute>
        <xsl:attribute name="DATA3">
          <xsl:value-of select="ECG/R002/A03"/>
        </xsl:attribute>
      </xsl:element>
      <xsl:element name="registry" >
        <xsl:attribute name="DATA1">
          <xsl:value-of select="ECG/R003/A01"/>
        </xsl:attribute>
        <xsl:attribute name="DATA2">
          <xsl:value-of select="ECG/R003/A02"/>
        </xsl:attribute>
        <xsl:attribute name="DATA3">
          <xsl:value-of select="ECG/R003/A03"/>
        </xsl:attribute>
      </xsl:element>
      <xsl:element name="registry" >
        <xsl:attribute name="DATA1">
          <xsl:value-of select="ECG/R004/A01"/>
        </xsl:attribute>
        <xsl:attribute name="DATA2">
          <xsl:value-of select="ECG/R004/A02"/>
        </xsl:attribute>
        <xsl:attribute name="DATA3">
          <xsl:value-of select="ECG/R004/A03"/>
        </xsl:attribute>
      </xsl:element>
    </xsl:element>
  </xsl:element>

</xsl:template>


</xsl:stylesheet>

我认为这不是最好的方法!因为标签的数量会有RXXX个未知数。任何的想法?我已经考虑过循环周期,但似乎这里不可能。感谢

0 个答案:

没有答案