XSLT编码问题

时间:2015-08-13 06:05:49

标签: xml xslt

预期outPut:

<?xml version="1.0" encoding="utf-8"?>
<Tablix1>
    <SIDCode_Collection>
        <SIDCode SIDCode="854-2013-17011949">
            <PName_Collection>
                <PName PName="Test1" />
                <PName PName="Test2" />
            </PName_Collection>
        </SIDCode>
        <SIDCode SIDCode="854-2013-17011950">
            <PName_Collection>
                <PName PName="Test3" />
                <PName PName="Test4" />
            </PName_Collection>
        </SIDCode>
    </SIDCode_Collection>
</Tablix1>

我编写了XSLT代码来转换上面提到的SSR报告输出。 但我无法按预期获得输出。有人可以帮我找到问题吗?

目前这仅提供SIDCode。但它没有在XML输出中给出相应的Pname结果。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="SampleXML">
<xsl:output method="xml" indent="yes" encoding="utf-8"/>

<xsl:template match="/">
    <xsl:for-each select="a:Report/a:Tablix1/a:SIDCode_Collection/a:SIDCode">
        <xsl:element name="{name(.)}">

            <xsl:for-each select="@SIDCode">
                <xsl:element name="{name(.)}">
                    <xsl:value-of select="."/>

                    <xsl:for-each select="a:PName_Collection/a:PName">
                            <xsl:element name="{name(.)}">
                                <xsl:for-each select="@PName">
                                    <xsl:element name="{name(.)}">
                                        <xsl:value-of select="@PName"/>
                                </xsl:element>
                            </xsl:for-each>
                            </xsl:element>
                    </xsl:for-each>
                </xsl:element>
                    </xsl:for-each>
                </xsl:element>
            </xsl:for-each>
</xsl:template>

1 个答案:

答案 0 :(得分:0)

如果没有源XML,很难猜到,但我认为至少有一个问题如下:

使用行<xsl:for-each select="@SIDCode">设置属性&#34; SIDCode&#34;作为上下文节点。然后,在foreach循环内部,您尝试访问节点a:PName_Collection/a:PName。这不起作用,因为a:PName_Collection/a:PName显然不是属性节点@SIDCode的子节点。我建议删除@中的<xsl:for-each select="@SIDCode">并访问<xsl:element name="{name(.)}"><xsl:value-of select="."/>中XPath表达式中的属性节点。