首页 > 解决方案 > 嵌套变换

问题描述

我尝试对以下 XML 执行转换:

<?xml version="1.0" encoding="UTF-8"?>
<A_Example>
    <A_ExampleType>
    
    <RandomData1></RandomData1>
    <RandomData2></RandomData2>
    <RandomData3></RandomData3>
    <RandomData4></RandomData4>
    <RandomData5></RandomData5>
    <RandomData6></RandomData6>
    
    </A_ExampleType>
    
    <A_ExampleType>
    
    <RandomData1></RandomData1>
    <RandomData2></RandomData2>
    <RandomData3></RandomData3>
    <RandomData4></RandomData4>
    <RandomData5></RandomData5>
    <RandomData6></RandomData6>
    
    </A_ExampleType>
    
    <A_ExampleType>
      
    <RandomData1></RandomData1>
    <RandomData2></RandomData2>
    <RandomData3></RandomData3>
    <RandomData4></RandomData4>
    <RandomData5></RandomData5>
    <RandomData6></RandomData6>
    
      <to_ExampleChild>
        <A_ExampleChildType>
          
         <RandomChildData1></RandomChildData1>
         <RandomChildData2></RandomChildData2>
         <RandomChildData3></RandomChildData3>
         <RandomChildData4></RandomChildData4>
         <RandomChildData5></RandomChildData5>
         <RandomChildData6></RandomChildData6>
          <to_ExampleArea>
            <A_ExampleAreaType>
            
            <RandomAreaData1></RandomAreaData1>
            <RandomAreaData2></RandomAreaData2>
            <RandomAreaData3></RandomAreaData3>
            <RandomAreaData4></RandomAreaData4>
            <RandomAreaData5></RandomAreaData5>
            <RandomAreaData6></RandomAreaData6>
      
            </A_ExampleAreaType>
          </to_ExampleArea>
          
           <RandomData1></RandomData1>
           <RandomData2></RandomData2>
           <RandomData3></RandomData3>
           <RandomData4></RandomData4>
           <RandomData5></RandomData5>
           <RandomData6></RandomData6>
           
        </A_ExampleChildType>
      </to_ExampleChild>
      
      
         <RandomData1></RandomData1>
         <RandomData2></RandomData2>
         <RandomData3></RandomData3>
         <RandomData4></RandomData4>
         <RandomData5></RandomData5>
         <RandomData6></RandomData6>
   
    </A_ExampleType>
    
        <A_ExampleType>
      
    <RandomData1></RandomData1>
    <RandomData2></RandomData2>
    <RandomData3></RandomData3>
    <RandomData4></RandomData4>
    <RandomData5></RandomData5>
    <RandomData6></RandomData6>
    
      <to_ExampleChild>
        <A_ExampleChildType>
          
         <RandomChildData1></RandomChildData1>
         <RandomChildData2></RandomChildData2>
         <RandomChildData3></RandomChildData3>
         <RandomChildData4></RandomChildData4>
         <RandomChildData5></RandomChildData5>
         <RandomChildData6></RandomChildData6>
          <to_ExampleArea>
            <A_ExampleAreaType>
            
            <RandomAreaData1></RandomAreaData1>
            <RandomAreaData2></RandomAreaData2>
            <RandomAreaData3></RandomAreaData3>
            <RandomAreaData4></RandomAreaData4>
            <RandomAreaData5></RandomAreaData5>
            <RandomAreaData6></RandomAreaData6>
      
            </A_ExampleAreaType>
          </to_ExampleArea>
          
           <RandomData1></RandomData1>
           <RandomData2></RandomData2>
           <RandomData3></RandomData3>
           <RandomData4></RandomData4>
           <RandomData5></RandomData5>
           <RandomData6></RandomData6>
           
        </A_ExampleChildType>
        </to_ExampleChild>
      
      
         <RandomData1></RandomData1>
         <RandomData2></RandomData2>
         <RandomData3></RandomData3>
         <RandomData4></RandomData4>
         <RandomData5></RandomData5>
         <RandomData6></RandomData6>
   
    </A_ExampleType>
</A_Example>

我想实现以下输出:

<A_Example>
    <A_ExampleType>
    
    <RandomData1></RandomData1>
    <RandomData2></RandomData2>
    <RandomData3></RandomData3>
    <RandomData4></RandomData4>
    <RandomData5></RandomData5>
    <RandomData6></RandomData6>
    
    </A_ExampleType>
    
    <A_ExampleType>
    
    <RandomData1></RandomData1>
    <RandomData2></RandomData2>
    <RandomData3></RandomData3>
    <RandomData4></RandomData4>
    <RandomData5></RandomData5>
    <RandomData6></RandomData6>
    
    </A_ExampleType>
    
    <A_ExampleType>
      
    <RandomData1></RandomData1>
    <RandomData2></RandomData2>
    <RandomData3></RandomData3>
    <RandomData4></RandomData4>
    <RandomData5></RandomData5>
    <RandomData6></RandomData6>
    
    
          
    <RandomChildData1></RandomChildData1
    <RandomChildData2></RandomChildData2>
    <RandomChildData3></RandomChildData3>
    <RandomChildData4></RandomChildData4>
    <RandomChildData5></RandomChildData5>
    <RandomChildData6></RandomChildData6>
            
    <RandomAreaData1></RandomAreaData1>
    <RandomAreaData2></RandomAreaData2>
    <RandomAreaData3></RandomAreaData3>
    <RandomAreaData4></RandomAreaData4>
    <RandomAreaData5></RandomAreaData5>
    <RandomAreaData6></RandomAreaData6>
          
    <RandomData1></RandomData1>
    <RandomData2></RandomData2>
    <RandomData3></RandomData3>
    <RandomData4></RandomData4>
    <RandomData5></RandomData5>
    <RandomData6></RandomData6>
      
    <RandomData1></RandomData1>
    <RandomData2></RandomData2>
    <RandomData3></RandomData3>
    <RandomData4></RandomData4>
    <RandomData5></RandomData5>
    <RandomData6></RandomData6>
   
    </A_ExampleType>
    
     <A_ExampleType>
      
    <RandomData1></RandomData1>
    <RandomData2></RandomData2>
    <RandomData3></RandomData3>
    <RandomData4></RandomData4>
    <RandomData5></RandomData5>
    <RandomData6></RandomData6>
          
    <RandomChildData1></RandomChildData1>
    <RandomChildData2></RandomChildData2>
    <RandomChildData3></RandomChildData3>
    <RandomChildData4></RandomChildData4>
    <RandomChildData5></RandomChildData5>
    <RandomChildData6></RandomChildData6>
            
    <RandomAreaData1></RandomAreaData1>
    <RandomAreaData2></RandomAreaData2>
    <RandomAreaData3></RandomAreaData3>
    <RandomAreaData4></RandomAreaData4>
    <RandomAreaData5></RandomAreaData5>
    <RandomAreaData6></RandomAreaData6>
      
    <RandomData1></RandomData1>
    <RandomData2></RandomData2>
    <RandomData3></RandomData3>
    <RandomData4></RandomData4>
    <RandomData5></RandomData5>
    <RandomData6></RandomData6>
      
    <RandomData1></RandomData1>
    <RandomData2></RandomData2>
    <RandomData3></RandomData3>
    <RandomData4></RandomData4>
    <RandomData5></RandomData5>
    <RandomData6></RandomData6>
   
    </A_ExampleType>
</A_Example>

简而言之,我想要一个没有嵌套节点的平面结构。我尝试使用以下 XSLT 进行处理,但并没有走得太远。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/A_Example">
    <test>
    <xsl:for-each select="//A_ExampleType">
    <hallo>
        <xsl:value-of select="."></xsl:value-of>
    </hallo>
    </xsl:for-each>
    </test>
    </xsl:template>
</xsl:stylesheet>

如果我运行我的代码,我会得到整个数据以及来自所有节点的数据,但没有声明。有了这个,我的意思是我得到了这样的东西。

运行 XSLT 代码之前的 XML:

<RandomData1>Test12345</RandomData1>

运行 XSLT 代码后的 XML 我只得到:

         Test12345

为什么会发生这种情况,我怎样才能取回声明?

标签: xslt

解决方案


当您只想要从第二个嵌套级别( A_ExampleType )开始的“叶”节点(没有子节点的节点)时,我会建议以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/A_Example">
        <xsl:copy>
            <xsl:for-each select="A_ExampleType">
                <xsl:copy>
                    <xsl:copy-of select="descendant::*[not(child::*)]"/>
                </xsl:copy>
            </xsl:for-each>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

推荐阅读