所有
我知道这对你来说很简单,但对我来说,作为一个初学者,我无法做到这一点。 :(请参阅下面的预期输出。正确的XLST应该是什么?提前感谢。
输入XML:
<map>
<title>Lang's Commercial Leasing in Australia</title>
<topic id="io1529956sl235024462" />
<topichead navtitle="PRECEDENT FINDING LISTS" id="io2559290sl622242477">
<topic id="io2558936sl197225260" />
<topic id="io2558936sl197225261" />
<topic id="io2558936sl197225262" />
</topichead>
</map>
XLST
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates select="@*|node()" />
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="map/topichead/topic">
<comm.intro>
<group>
<xsl:attribute name="link"><xsl:value-of select="@id" /></xsl:attribute>
<xsl:apply-templates select="node()" />
</group>
</comm.intro>
</xsl:template>
</xsl:stylesheet>
输出:
<map>
<title>Lang's Commercial Leasing in Australia</title>
<topic id="io1529956sl235024462" />
<topichead navtitle="PRECEDENT FINDING LISTS" id="io2559290sl622242477">
<comm.intro>
<group link="io2558936sl197225260">
</comm.intro>
<comm.intro>
<group link="io2558936sl197225261">
</comm.intro>
<comm.intro>
<group link="io2558936sl197225262">
</comm.intro>
</topichead>
</map>
预期产出:
<map>
<title>Lang's Commercial Leasing in Australia</title>
<topic id="io1529956sl235024462" />
<topichead navtitle="PRECEDENT FINDING LISTS" id="io2559290sl622242477">
<comm.intro>
<group link="io2558936sl197225260">
<group link="io2558936sl197225261">
<group link="io2558936sl197225262">
</comm.intro>
</topichead>
</map>
答案 0 :(得分:0)
而不是
<xsl:template match="map/topichead/topic">
<comm.intro>
<group>
<xsl:attribute name="link"><xsl:value-of select="@id" /></xsl:attribute>
<xsl:apply-templates select="node()" />
</group>
</comm.intro>
</xsl:template>
使用两个模板
<xsl:template match="map/topichead">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<comm.intro>
<xsl:apply-templates/>
</comm.intro>
</xsl:copy>
</xsl:template>
<xsl:template match="map/topichead/topic">
<group link="{@id}">
<xsl:apply-templates/>
</group>
</xsl:template>
并且您不需要第一个模板<xsl:template match="/">
,文档节点的子项由内置模板处理。