1

数日後、私はまだ 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 は不平を言います。

今のところ、私はアイデアが尽きており、すべてのヒントに非常に感謝しています!

4

1 に答える 1