0

这是我上一个问题的反向映射。在这里,我正在尝试改造

<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>
4

2 回答 2

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>
于 2013-09-19T20:00:37.253 回答
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>
于 2013-09-19T19:15:45.447 回答