我有一个嵌套的层次结构xml结构,它将使用xsl转换展平。以下是该方案。
<company>
<Managers>
<Manager>
<Name>Matt</Name>
<ID>1</ID>
<Manager>
<Name>Joe</Name>
<ID>11</ID>
<Manager>
<Name>Dave</Name>
<ID>111</ID>
</Manager>
</Manager>
</Manager>
<Manager>
<Name>mike</Name>
<ID>2</ID>>
</Manager>
</Managers>
</company>
结果:
Matt 1
Joe 11
Dave 111
Mike 2
答案 0 :(得分:1)
@Mathias Mueller的更好选择,
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="Manager">
<xsl:value-of select="Name" />
<xsl:text>: </xsl:text>
<xsl:value-of select="ID" />
<xsl:text> </xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:transform>
为什么这样更好:它会更恰当地控制文本输出(假设您确实希望将其输出为纯文本格式)。它也更加面向XSLT模板,与for-each
循环相邻,往往更具可扩展性和可维护性。
使用descendant-or-self
轴:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="//Managers">
<xsl:for-each select="descendant-or-self::Manager">
<xsl:value-of select="Name" />: <xsl:value-of select="ID" /><xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:transform>
输出:
Matt: 1 Joe: 11 Dave: 111 mike: 2