Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT:从标记多次出现的xml生成csv_Xslt - Fatal编程技术网

XSLT:从标记多次出现的xml生成csv

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"/>

我有一个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"/>
    <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