Tec*_*ter 5 sql-server xslt sql-server-2008 reporting-services
我有xml,结构如下
<root>
<PNode>
<node1>
<node1Child>data</node1Child>
<node2Child>data</node2Child>
</node1>
</PNode>
<SecondNode>
<node1>
<node1Child>
<child>data</child>
</node1Child>
</node1>
</SecondNode>
</root>
Run Code Online (Sandbox Code Playgroud)
我想使用genric xslt输出,因为我有很多xml转换为这种格式.
<root>
<Pnode-node1-node1Child>data</Pnode-node1-node1Child>
<Pnode-node1-node2Child>data</Pnode-node1-node2Child>
<SecondNode-node1-node1child-child>data</SecondNode-node1-node1child-child>
</root>
Run Code Online (Sandbox Code Playgroud)
它可能更深或更少.
我可以通过XSLT来做,请给出任何示例或参考
我想这样做从sql server 2k8 r2 rdl生成PDF.因为rdl不接受嵌套的xml所以需要将其展平.
小智 3
这个样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:param name="pName"/>
<xsl:apply-templates>
<xsl:with-param name="pName" select="concat($pName,name(),'-')"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="text()">
<xsl:param name="pName"/>
<xsl:element name="{substring($pName,1,string-length($pName)-1)}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
输出:
<root>
<PNode-node1-node1Child>data</PNode-node1-node1Child>
<PNode-node1-node2Child>data</PNode-node1-node2Child>
<SecondNode-node1-node1Child-child>data</SecondNode-node1-node1Child-child>
</root>
Run Code Online (Sandbox Code Playgroud)
更新:如果可能有空节点......
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:param name="pName"/>
<xsl:apply-templates>
<xsl:with-param name="pName" select="concat($pName,name(),'-')"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="*[not(*)]">
<xsl:param name="pName"/>
<xsl:element name="{$pName}{name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
注意:匹配最里面的元素。
| 归档时间: |
|
| 查看次数: |
1402 次 |
| 最近记录: |