Я пытаюсь взять файл CSV в качестве входных данных и преобразовать его в XML. Я новичок в XSLT и нашел способ конвертировать CSV в XML (на примере Andrew Welch ) примерно так:
Входной файл CSV:
car manufacturer,model,color,price,inventory
subaru,outback,blue,23195,54
subaru,forester,silver,20495,23
И мой выходной XML будет:
<?xml version="1.0" encoding="UTF-8"?>
<rows>
<row>
<column name="car manufacturer">subaru</column>
<column name="model">outback</column>
<column name="color">blue</column>
<column name="price">23195</column>
<column name="inventory">54</column>
</row>
<row>
<column name="car manufacturer">subaru</column>
<column name="model">forester</column>
<column name="color">silver</column>
<column name="price">20495</column>
<column name="inventory">23</column>
</row>
</rows>
Мой желаемый результат на самом деле похож на:
<stock>
<model>
<car>subaru outback</car>
<color>blue</color>
<price>23195</price>
<inventory>54</inventory>
</model>
<model>
<car>subaru forester</car>
<color>silver</color>
<price>20495</price>
<inventory>23</inventory>
</model>
</stock>
Что я прочитал, так это то, что лучше всего это сделать с помощью двухфазного преобразования. CSV в XML выполняется с использованием XSLT 2.0, поэтому я подумал, что двухфазное преобразование будет также выполнено с использованием этой функции без использования функции набора узлов.
Таким образом, первый этап заключается в том, чтобы принять исходный файл CSV в качестве входных данных, а затем вывести промежуточный XML, показанный выше. Затем возьмите этот промежуточный XML и передайте его в другое преобразование, чтобы получить желаемый результат.
Кто-нибудь может помочь с тем, как можно осуществить двухфазное преобразование? У меня проблемы с передачей выходных данных первой фазы как входных данных фазы 2?
У меня пока что-то вроде этого:
<xsl:import href="csv2xml.xsl"/>
<xsl:output method="xml" indent="yes" />
<xsl:variable name="intermediate">
<xsl:apply-templates select="/" mode="csv2xml"/>
</xsl:variable>
<xsl:template match="rows" name="main">
**[This is what I'm having trouble with]**
</xsl:template>