如何使用XSLT将多个节点组合成一个节点

时间:2016-11-25 10:28:30

标签: xml xslt-1.0 xslt-2.0

我将此作为我的输入:

<name>
  <n1>nisha</n1>
</name>
<name>
  <n1>aisha</n1>
</name>
<name>
  <n1>shankar</n1>
</name>
<surname>
iyer
</surname>

我想将此作为我的输出仅用于具有名称标签的元素:

<name>
<n1>nisha</n1>
<n1>aisha</n1>
<n1><shankar</n1>
</name>

2 个答案:

答案 0 :(得分:0)

请注意,您的xml文件需要一个根元素,否则无法处理,即:

<names>
  <name>
     <n1>nisha</n1>
  </name>
  ...
</names>

生成所需输出的简单XSLT样式表是:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" indent="yes" />

  <xsl:template match="/*"> <!-- Or match="/pathToNameElements" -->
    <name>
      <xsl:apply-templates select="name/n1" />
    </name>
  </xsl:template>

  <xsl:template match="name/n1">
    <xsl:copy-of select="." />
  </xsl:template>

</xsl:stylesheet>

答案 1 :(得分:0)

就这么简单

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="name[1]">
    <name>
      <xsl:copy-of select="/*/name/*"/>
    </name>
  </xsl:template>
  <xsl:template match="text()"/>
</xsl:stylesheet>

将此转换应用于以下XML文档(提供的文本,更正为格式良好的XML文档):

<people>
    <name>
        <n1>nisha</n1>
    </name>
    <name>
        <n1>aisha</n1>
    </name>
    <name>
        <n1>shankar</n1>
    </name>
    <surname>
iyer
    </surname>
</people>

生成了想要的结果

<name>
   <n1>nisha</n1>
   <n1>aisha</n1>
   <n1>shankar</n1>
</name>