如何添加子元素

时间:2013-09-19 18:33:21

标签: xml xslt

它是我之前的question的反向映射。 我在这里试图改造

<Information>
 <Element11/>
 <Element12/>
 <Element13/>
</Information>
<!-- This will be the child Element1 -->
<Metadata>
 <Element11/>
 <Element12/>
 <Element13/>
</Metadata>
<Metadata>
 <Element11/>
 <Element12/>
 <Element13/>
</Metadata>

要:

<Element1>
  <Element11/>
  <Element12/>
  <Element13/>
  <Element1>
     <Element11/>
     <Element12/>
     <Element13/>
  </Element1>
  <Element1>
     <Element11/>
     <Element12/>
     <Element13/>
  </Element1>
</Element1>

我尝试在根目录中使用or,但它无效。

<xsl:for-each select="Information | Metadata">
 <Element1>
 <!-- Rest of the elements -->
  <xsl:for-each select="Metadata">
   <Element1>
   <!-- Rest of the elements -->
   </Element1>
  </xsl:for-each>
 </Element1>
</xsl:for-each>

2 个答案:

答案 0 :(得分:1)

我真的不知道这个例子的意义,但下面的代码应该产生所需的输出......但它不是解决它的唯一可行方法:-D

<xsl:template match="Information">
  <Element1>
    <xsl:for-each select="*">
      <xsl:copy>
        <!-- if the elements contains values -->
        <xsl:value-of select="."/>
      </xsl:copy>
    </xsl:for-each>
    <xsl:for-each select="../Metadata">
      <Element1>
        <xsl:for-each select="*">
          <xsl:copy>
            <!-- if the elements contains values -->
            <xsl:value-of select="."/>
          </xsl:copy>
        </xsl:for-each>
      </Element1>
    </xsl:for-each>
  </Element1>
</xsl:template>

答案 1 :(得分:1)

另一种非常相似的方式,假设输入格式正确(包含在某个元素中):)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/SomeElement">
    <Element1>
        <xsl:copy-of select="Information/*"/>
        <xsl:for-each select="Metadata">
            <Element1>
                <xsl:copy-of select="*"/>
            </Element1>
        </xsl:for-each>
    </Element1>
</xsl:template>
</xsl:stylesheet>