Мне нужно преобразование xslt, которое преобразует xml, сгенерированный одним приложением и отправленный в другое приложение для обработки.Ниже приведен пример исходного XML-файла, содержащего имена полей данных и соответствующие им данные, такие как 'current_date', 'item' .. для имен полей и '18 -OCT-2018 ',' 1044103 ', .. для значений данных.
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<labels _JOBNAME="LBL1273711">
<label>
<variable name= "current_date">18-OCT-2018</variable>
<variable name= "item">1044103</variable>
<variable name= "item_description">RING,22-16 AWG,#4,RED,PB FREE</variable>
<variable name= "locator">INRE</variable>
</label>
</labels>
Приведенный выше xml преобразуется в следующий xml:
<XMLScript Version="1.0">
<Command>
<Print JobName="LBL1273711">
<RecordSet Name="Text File 1" Type="btTextFile" AddIfNone="true">
<TextData><![CDATA[
current_date", "item", "item_description", "locator"
"18-OCT-2018", "1044103", "RING,22-16 AWG,#4,RED,PB FREE", "INRE"
]]></TextData>
</RecordSet>
</Print>
</Command>
</XMLScript>
Имена полей данных, количество полей и их значения будут различаться и изменяться от одного входящего xml к другому.используя приведенный ниже xslt в одном требовании, где имена полей и количество полей жестко закодированы.Но мне нужно изменить его, чтобы преобразовать исходный xml из любого числа полей и имен полей, указанных в переменной / имени.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" cdata-section-elements="TextData"/>
<xsl:template match="/labels">
<XMLScript Version="1.0">
<Command>
<Print JobName="{@_JOBNAME}">
<RecordSet Name="Text File 1" Type="btTextFile" AddIfNone="true">
<TextData>
<xsl:value-of select="concat('
'
,'current_date','", "','item','", "',
'item_description','", "','locator','"
')" />
<xsl:for-each select="label">
<xsl:value-of select="concat('"',
variable[@name='current_date'],'", "',
variable[@name='item'],'", "',
variable[@name='item_description'],'", "',
variable[@name='locator'],'"
'
)" />
</xsl:for-each>
</TextData>
</RecordSet>
</Print>
</Command>
</XMLScript>
</xsl:template>
</xsl:stylesheet>
Заранее спасибо.