如何从XML复制节点而不使用XSLT复制该节点的子节点?

时间:2010-06-22 20:46:14

标签: xml xslt

我有一个巨大的XML需要处理,但我只需要根中的几个节点。问题是,在该节点中,我有一个需要删除的孩子。任何人都在意解释这是否可行,如果可行,怎么办? 这是我得到的XML示例:

    <XML>
 <Properties>
  Contend
 </Properties>
 <Events>
  Contend
 </Events>
 <Contracts>
  Contend
 </Contracts>
 <Trades>
  Contend 
 </Trades>
 <Deals>
  <Deal>
   <Edition>
    <Object>
     <Values>
      <Value>N</Value>
      <Value>N</Value>
     </Values>
    </Object>
    <Members>
     <memberValue>
      <member>template</member>
      <member>template</member>
      <member>
       <Object>
        <Flows>
         <Cupom>
          <Period>
           <Calculation>
            <Data>N</Data>
            <Data>N</Data>
            <Rate>
             <Data>N</Data>
             <Data>N</Data>
             <observations>
              Tons of Contend
             </observations>
            </Rate>
           </Calculation>
          </Period>
         </Cupom>
         <Cupom>
          <Period>
           <Calculation>
            <Data>N</Data>
            <Data>N</Data>
            <Rate>
             <Data>N</Data>
             <Data>N</Data>
             <observations>
              Tons of Contend
             </observations>
            </Rate>
           </Calculation>
          </Period>
         </Cupom>
         <Cupom>
          <Period>
           <Calculation>
            <Data>N</Data>
            <Data>N</Data>
            <Rate>
             <Data>N</Data>
             <Data>N</Data>
             <observations>
              Tons of Contend
             </observations>
            </Rate>
           </Calculation>
          </Period>
         </Cupom>
         <Cupom>
          <Period>
           <Calculation>
            <Data>N</Data>
            <Data>N</Data>
            <Rate>
             <Data>N</Data>
             <Data>N</Data>
             <observations>
              Tons of Contend
             </observations>
            </Rate>
           </Calculation>
          </Period>
         </Cupom>
        </Flows>
       </Object>
      </member>
     </memberValue>
    </Members>
   </Edition>
  </Deal>
 </Deals>
</XML>

我需要保留de Node,但是,在内部,我需要删除它。请注意,节点在每个节点中重复。所有这些都必须删除。

最后,我的XML应该是这样的:

    <XML>
 <Deals>
  <Deal>
   <Edition>
    <Object>
     <Values>
      <Value>N</Value>
      <Value>N</Value>
     </Values>
    </Object>
    <Members>
     <memberValue>
      <member>template</member>
      <member>template</member>
      <member>
       <Object>
        <Flows>
         <Cupom>
          <Period>
           <Calculation>
            <Data>N</Data>
            <Data>N</Data>
            <Rate>
             <Data>N</Data>
             <Data>N</Data>
            </Rate>
           </Calculation>
          </Period>
         </Cupom>
         <Cupom>
          <Period>
           <Calculation>
            <Data>N</Data>
            <Data>N</Data>
            <Rate>
             <Data>N</Data>
             <Data>N</Data>
            </Rate>
           </Calculation>
          </Period>
         </Cupom>
         <Cupom>
          <Period>
           <Calculation>
            <Data>N</Data>
            <Data>N</Data>
            <Rate>
             <Data>N</Data>
             <Data>N</Data>
            </Rate>
           </Calculation>
          </Period>
         </Cupom>
         <Cupom>
          <Period>
           <Calculation>
            <Data>N</Data>
            <Data>N</Data>
            <Rate>
             <Data>N</Data>
             <Data>N</Data>
            </Rate>
           </Calculation>
          </Period>
         </Cupom>
        </Flows>
       </Object>
      </member>
     </memberValue>
    </Members>
   </Edition>
  </Deal>
 </Deals>
</XML>

非常感谢任何可以提供帮助的人。

干杯!

1 个答案:

答案 0 :(得分:1)

此转化:

<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="/*/*[not(self::Deals)] | Cupom/*/*/*/observations"/>
</xsl:stylesheet>

对提供的XML文档执行时,会产生想要的结果。