Мне нужно преобразовать входные данные XML-структуры, используя шаблон XSL.Преобразование XML с использованием XSL-шаблона
<?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>
Tag R000
определяет, сколько RXXX
регистрирует XML будет содержать. Идея состоит в том, чтобы преобразовать XML, используя XSL, в следующий вывод. В этом случае я применяю его к четырем значениям R000
. Идея состоит в том, чтобы использовать случайное число во вводе, поэтому оно будет обрабатывать n регистров. A01
, A02
, A03
Теги всегда будут присутствовать. Просто номер 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
количество тегов. Есть идеи? Я думал о цикле цикла, но, похоже, это невозможно. Благодаря
Так где именно вы застряли с этим? –
Что вы уже пробовали? –
У меня возникли проблемы с использованием XSL. Думаю, мне нужен цикл for для получения значений RXXX. Я не мог этого сделать! Спасибо –