几天后,我仍在拼命尝试将 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 没有定义。
现在我没有想法,非常感谢每一个提示!