3

我正在使用这个输入 xml 文件。

                 <Content>
                <body><text>xxx</text></body>
                    <body><text>yy</text></body>
               <body><text>zz</text></body>
               <body><text>kk</text></body>
                   <body><text>mmm</text></body>
                        </Content>

Xslt 转换后的输出应该是

                        <Content>
                 <body><text>xxx</text>
                       <text>yy</text>
                           <text>zz</text>
                     <text>kk</text>
                   <text>mmm</text></body>
                     </Content>

谁能提供其相关的 Xsl 文件。

4

2 回答 2

2

这个完整的转变

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

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

 <xsl:template match="body"/>
 <xsl:template match="body[1]">
  <body>
   <xsl:apply-templates select="../body/node()"/>
  </body>
 </xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<Content>
    <body>
        <text>xxx</text>
    </body>
    <body>
        <text>yy</text>
    </body>
    <body>
        <text>zz</text>
    </body>
    <body>
        <text>kk</text>
    </body>
    <body>
        <text>mmm</text>
    </body>
</Content>

产生想要的正确结果

<Content>
   <body>
      <text>xxx</text>
      <text>yy</text>
      <text>zz</text>
      <text>kk</text>
      <text>mmm</text>
   </body>
</Content>

说明

  1. 身份规则“按原样”复制每个节点。

  2. 它被两个模板覆盖。第一个忽略/删除每个body元素`。

  3. 覆盖身份模板的第二个模板也覆盖了第一个这样的模板(删除每个body元素),用于任何作为其父body元素的第一个子元素的模板。body仅对于第一body个子元素,会生成一个元素,并在其主体中处理作为其父元素(当前元素及其所有兄弟元素)body的任何子节点的子节点的所有节点。bodybodybody

于 2012-05-15T12:24:07.720 回答
1
    <xsl:template match="Content">
      <body>
            <xsl:apply-templates select="body/text"/>
      </body>
    </xsl:template>

  <xsl:template match="body/text">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>
于 2012-05-15T10:42:38.983 回答