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 中没有一次出现键/元/附加/字段,则转换失败并显示

XTTE0570:不允许空序列作为变量 $keyAddDataCols 的值

我试图省略“铸造”(... as="element..."),但它根本不起作用。我试图用“xsl:if test=field”检查一个字段的存在,但 saxon9 仍然抱怨 keyAddDataCols 没有定义。

现在我没有想法,非常感谢每一个提示!

4

1 回答 1

0

如果您很高兴最终输出为空(如果没有key/meta/additional/field元素),那么只需更改

<xsl:variable name="keyAddDataCols" as="element(field)+">

<xsl:variable name="keyAddDataCols" as="element(field)*">

(*而不是+) 以允许变量包含空序列。

于 2013-10-31T16:01:55.403 回答