数日後、私はまだ XML 出力を CSV に変換しようと必死です。
ソース XML には、空でない場合にのみ存在する追加の「メタ」エントリがいくつかのレベルで含まれています。
例:
<export>
<key authority="0" description="tp 2013-06-13" id="2" name="tp" number="17">
<meta>
<additional>
<field label="Datum" value="21.12.2013"/>
</additional>
</meta>
</key>
</export>
「ラベル」はグループ化要素であり、したがって列ヘッダーです。
ここでのさまざまな提案に従って、この XSLT のスニペットで成功しました。
<xsl:key name="kf" match="field" use="@label"/>
<xsl:variable name="keyAddDataCols" as="element(field)+">
<xsl:for-each-group select="/export//key/meta/additional/field" group-by="@label">
<field key="{current-grouping-key()}"/>
</xsl:for-each-group>
</xsl:variable>
<xsl:value-of select="$keyAddDataCols/@key" separator="{';'} "/>
しかし、Source-XML に key/meta/additional/field が 1 つも出現しない場合、変換は失敗します。
XTTE0570: 変数 $keyAddDataCols の値として空のシーケンスは許可されていません
「キャスト」(… as="element…")を省略しようとしましたが、まったく機能しません。「xsl:if test=field」でフィールドの存在を確認しようとしましたが、keyAddDataCols が定義されていないにもかかわらず、saxon9 は不平を言います。
今のところ、私はアイデアが尽きており、すべてのヒントに非常に感謝しています!