XSLT:从标记多次出现的xml生成csv
我有一个xml格式:XSLT:从标记多次出现的xml生成csv,xslt,Xslt,我有一个xml格式: b值 c值 值b2 值c2 值e 值f 有许多像“A”这样的标记可以多次出现。问题是,如果在CSV和xl工作表(数据导出的地方)中出现一次输出,则: 第1列第2列第3列第4列 b值c值e值f 如果A出现两次,则xl中的输出为 第1列第2列第3列第4列 b值c值b2值c2值e值f 我希望它是 第1列第2列第3列第4列 b值c值e值f 值b2值c2值e值f 要生成csv,我有如下xslt代码: <xsl:value-of select="G/P/A"/>
b值 c值 值b2 值c2 值e 值f
有许多像“A”这样的标记可以多次出现。问题是,如果在CSV和xl工作表(数据导出的地方)中出现一次输出,则:第1列第2列第3列第4列
b值c值e值f
如果A出现两次,则xl中的输出为
第1列第2列第3列第4列
b值c值b2值c2值e值f
我希望它是
第1列第2列第3列第4列
b值c值e值f
值b2值c2值e值f
要生成csv,我有如下xslt代码:
<xsl:value-of select="G/P/A"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="D"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="E"/>
<xsl:text>,</xsl:text>
,
,
,
这将为您提供您想要的内容,但不会检查您的格式是否与您所声明的不同
<xsl:for-each select="//A">
<xsl:value-of select="b"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="c"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="ancestor::P/D"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="ancestor::P/E"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
我假设您可以使用XSLT2.0,并且通用列名D&E在名称和数量上都不是固定的。还假设常规列名也不是固定的。如果不是,请告诉我。列名是固定的,但数字不是固定的,因为xsd中很少有标记具有maxOccurs=“unbounded”。谢谢,它适用于上述xml,但在我的xml中,节点中也很少有标记,如果我必须访问它们,那么我将如何引用它们?我使用了../。(中的节点),但它工作不正常,是../。。与使用祖先不同的表示法?祖先::*返回树上的节点列表,因此祖先::G将在G节点中提供一些信息。它在另一个子节点中吗?添加一个示例,如果您现在想与祖先一起工作,我可以提供答案,可能是我之前输入了一些错误,但是如果我有这样的标记,现在我有另一个问题 在这种情况下,代码也在X中显示b,我使用了祖先或self,但它不起作用,我怎么能只引用我想要的特定b呢。
<xsl:for-each select="//A">
<xsl:value-of select="b"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="c"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="ancestor::P/D"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="ancestor::P/E"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
<G>
<P>
<A>
<b>value b</b>
<c>value c</c>
</A>
<A>
<b>value b2</b>
<c>value c2</c>
</A>
<D>value e</D>
<E>value f</E>
</P>
<P>
<A>
<b>value bx</b>
<c>value cx</c>
</A>
<A>
<b>value b2x</b>
<c>value c2x</c>
</A>
<D>value ex</D>
<E>value fx</E>
</P>
</G>
value b,value c,value e,value f
value b2,value c2,value e,value f
value bx,value cx,value ex,value fx
value b2x,value c2x,value ex,value fx