预期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>
答案 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表达式中的属性节点。