Мне нужно преобразование XSLT для преобразования одного формата XML, который содержит значения данных в атрибутах, в другой XML, имеющий те же значения данных, но в формате CSV, как текст в «CDATA».
Когда входной XML: -
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE labels SYSTEM "label.dtd">
<labels _FORMAT="c:\labels\format\VSAT_RCV_INV_LABEL.btw" _QUANTITY="1" _PRINTERNAME="STOUT" _JOBNAME="LBL1273712">
<label>
<variable name= "current_date">18-OCT-2018</variable>
<variable name= "item">1044103</variable>
<variable name= "item_description">TERM,RING,22-16 AWG,#4,INSL,RED,PB FREE</variable>
<variable name= "locator">INRE</variable>
<variable name= "mfg_part_num"></variable>
</label>
</labels>
Выходной XML должен быть: -
<xml version="1.0"?>
<XMLScript Version="1.0">
<Command>
<Print JobName="LBL1273712">
<PrintSetup>
<IdenticalCopiesOfLabel>1</IdenticalCopiesOfLabel>
<Printer>STOUT</Printer>
</PrintSetup>
<Format>c:\labels\format\vsat_rcv_inv_label.btw</Format>
<RecordSet Name="Text File 1" Type="btTextFile" AddIfNone="true">
<Delimitation>btDelimMixedQuoteAndComma</Delimitation>
<UseFieldNamesFromFirstRecord>true</UseFieldNamesFromFirstRecord>
<TextData>
<![CDATA[
"current_date","item","item_description","locator","mfg_part_num"
"18-OCT-2018", "1044103", "TERM,RING,22-16 AWG,#4,INSL,RED,PB FREE", "INRE", ""
]]>
</TextData>
</RecordSet>
</Print>
</Command>
</XMLScript>
Я хотел бы жестко закодировать имена полей данных вТекст CDATA, так как порядок атрибутов во входном XML постоянно меняется.
Например, иногда входной XML содержит атрибуты в следующем порядке:
- item,
- locator,
- current_date,
- mfg_part_num,
- item_description '
Но мне нужно поддерживать один определенный порядок в выходном XML, например
- current_date,
- item,
- item_description,
- locator,
- mfg_part_num '
Как мне добиться этого с помощью XSLT?