我對轉換的正確表達式有些問題。我正在生成CSV文件。 我可以很容易地生成以下CSV:將XML轉換爲CSV - 詳細信息
"version","","stuff",
"version1version2","annotation1annotation2","yadda",
不過,我想爲子域是逗號分隔的字符串中的不同情況,具體如下:
"version","","stuff",
"version1,version2","annotation1,annotation2","yadda",
我輸入看起來是像
<?xml version="1.0" encoding="UTF-8"?>
<collection>
<record>
<datafield tag="020">
<subfield code="a">version</subfield>
</datafield>
<datafield tag="040">
<subfield code="b">stuff</subfield>
</datafield>
</record>
<record>
<datafield tag="020">
<subfield code="a">version1</subfield>
<subfield code="9">annotation1</subfield>
</datafield>
<datafield tag="020">
<subfield code="a">version2</subfield>
<subfield code="9">annotation2</subfield>
</datafield>
<datafield tag="040">
<subfield code="b">yadda</subfield>
</datafield>
</record>
</collection>
使用下面的XSL(和xsltproc的)
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:apply-templates select="collection/record"/>
</xsl:template>
<xsl:template match="record">
<xsl:text>"</xsl:text>
<xsl:apply-templates select="datafield[@tag='020']/subfield[@code='a']"/>
<xsl:text>",</xsl:text>
<xsl:text>"</xsl:text>
<xsl:apply-templates select="datafield[@tag='020']/subfield[@code='9']"/>
<xsl:text>",</xsl:text>
<xsl:text>"</xsl:text>
<xsl:apply-templates select="datafield[@tag='040']/subfield[@code='b']"/>
<xsl:text>",</xsl:text>
<xsl:text>
</xsl:text>
</xsl:template>
我猜想以下的兄弟姐妹::或不(位置()=最後())與呼叫模板的組合將涉及,但我還沒有擊中一個工作的解決方案。任何幫助?
我不是在尋找一個通用的XML-to-csv轉換 - 任何面向這個特定數據集的東西都沒問題。
這是......非常容易。謝謝! – Jurgen 2010-07-13 12:46:43
@Jurgen:很高興聽到它適合你。 :-) – Tomalak 2010-07-13 12:48:10