每个帮助包装在新元素内的XSLT

时间:2016-04-25 10:46:38

标签: xml

所有

我知道这对你来说很简单,但对我来说,作为一个初学者,我无法做到这一点。 :(请参阅下面的预期输出。正确的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>

1 个答案:

答案 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="/">,文档节点的子项由内置模板处理。