几天之后,我仍在拼命尝试将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>
“label”是分组元素,因此是列标题。
在这里提出不同的建议后,我成功使用了这个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,则转换失败并带有
XTTE0570:不允许空序列作为变量的值 $ keyAddDataCols
我试图忽略“cast”(... as =“element ...”),但它根本不起作用。 我尝试使用“xsl:if test = field”来检查字段的存在,但是saxon9抱怨没有定义keyAddDataCols。
现在我已经没有想法了,非常感谢每一个提示!
答案 0 :(得分:0)
如果您对没有key/meta/additional/field
个元素的最终输出为空而感到高兴,那么只需更改
<xsl:variable name="keyAddDataCols" as="element(field)+">
到
<xsl:variable name="keyAddDataCols" as="element(field)*">
(*
而不是+
)允许变量包含空序列。