【发布时间】:2020-12-09 01:06:35
【问题描述】:
我正在用java(初级)编写一个程序,我真的需要xslt转换方面的帮助。有必要从 xml 制作一个 csv 文件。 我得到了这个 xslt 过滤器:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="node()" name="conv">
<xsl:call-template name="loop"/>
</xsl:template>
<xsl:template name="loop">
<xsl:for-each select="./*[count(*) = 0]">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:if test="position() = last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>
</xsl:text>
<xsl:for-each select="./*[(count(*) != 0) and (name()!='PARAMETRS')] ">
<xsl:call-template name="loop"/>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
源xml:
<Integration>
<PARAMETRS>
<ID>AZD</ID>
<DATE>2020-01-01</DATE>
</PARAMETRS>
<ORG>
<Thing>
<object>10220</object>
<type>U</type>
<dyn>
<items>
<val>988009</val>
<datebegin>2019-12-12</datebegin>
</items>
</dyn>
</Thing>
<Thing>
<object>10221</object>
<type>U</type>
<dyn>
<items>
<val>988010</val>
<datebegin>2019-12-13</datebegin>
</items>
<items>
<val>988011</val>
<datebegin>2019-12-14</datebegin>
</items>
</dyn>
</Thing>
</ORG>
</Integration>
在输出中,我得到以逗号分隔的行,以及几行(相同的项目),其值如下。并且无法弄清楚如何连接这些值...... 我会通过 value-of select = "concat" 来做,但我可能有几个 dyn (1, 2, 3 ...),因此这不合适。 输出需要一个用逗号分隔的 csv。 请告知如何将项目与其父级连接起来?或者有更简单的方法来解析具有不同数量的子节(子)的 xml。
预期输出:
10220,U,988009,2019-12-12
10221,U,988010,2019-12-13,988011,2019-12-14
【问题讨论】:
-
请在您的示例中显示预期的输出。 -- 提示:当输入不是作者设想的那样时,通用样式表通常不能按预期工作。
-
预期输出:10220,U,988009,2019-12-12 和下一个 10221,U,988010,2019-12-13,988011,2019-12-14 以下的内容
-
请不要在 cmets 中发布代码 - 改为编辑您的问题。确保我们可以清楚地看到输入中的哪些元素应该创建一个新行。