为每个子标签添加包装标签 - XSL 转换

时间:2021-06-11 08:34:31

标签: xml xslt

我有以下xml结构;

           <urn:SERIALS>
              <urn:SERIAL_NO>TH66</urn:SERIAL_NO>
              <urn:SERIAL_NO>TH95</urn:SERIAL_NO>
              <urn:SERIAL_NO>TH71</urn:SERIAL_NO>
           </urn:SERIALS>

我需要将其转换为以下内容(为每个 <urn:SERIAL_NOS> 添加额外的 <urn:SERIAL_NO> 包装器);

           <urn:SERIALS>
              <urn:SERIAL_NOS>
                 <urn:SERIAL_NO>TH66</urn:SERIAL_NO>
              </urn:SERIAL_NOS>
              <urn:SERIAL_NOS>
                 <urn:SERIAL_NO>TH95</urn:SERIAL_NO>
              </urn:SERIAL_NOS>
              <urn:SERIAL_NOS>
                 <urn:SERIAL_NO>TH71</urn:SERIAL_NO>
              <urn:SERIAL_NOS>
           </urn:SERIALS>

我尝试遵循 XSL 代码...

<xsl:output indent="yes"/>

<xsl:template match="@*|node()" name="ident">
  <xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
  </xsl:template>

  <xsl:template match="urn:SERIAL_NO">
  <xsl:value-of select="normalize-space(.)"/>
  <urn:SERIAL_NOS>
    <xsl:call-template name="ident" />
  </urn:SERIAL_NOS>
  </xsl:template>

输出结果有点奇怪...它有<urn:SERIAL_NOS>标签前面的Serials值

           <urn:SERIALS>
                 TH66<urn:SERIAL_NOS>
                 <urn:SERIAL_NO>TH66</urn:SERIAL_NO>
              </urn:SERIAL_NOS>
                 TH95<urn:SERIAL_NOS>
                 <urn:SERIAL_NO>TH95</urn:SERIAL_NO>
              </urn:SERIAL_NOS>
                 TH71<urn:SERIAL_NOS>
                 <urn:SERIAL_NO>TH71</urn:SERIAL_NO>
              </urn:SERIAL_NOS>
           </urn:SERIALS>

即使我删除了 <xsl:value-of select="normalize-space(.)"/>,它也会出现替换“TH”值的空格。知道如何解决这个问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

第二个模板应该是

  <xsl:template match="urn:SERIAL_NO">
  <urn:SERIAL_NOS>
    <xsl:copy-of select="."/>
  </urn:SERIAL_NOS>
  </xsl:template>