Вложенное преобразование - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь выполнить преобразование к следующему 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>

Если я запустил свой код, я получу все данные, а также данные со всех узлов, но без объявления. Имея это в виду, я получаю что-то вроде этого.

XML перед запуском кода XSLT:

<RandomData1>Test12345</RandomData1>

XML после запуска кода XSLT я получаю только:

         Test12345

Почему это происходит и как мне вернуть декларацию?

1 Ответ

1 голос
/ 02 августа 2020

Если вам нужны только «листовые» узлы (узлы без дочерних узлов), начиная со 2-го уровня вложенности ( 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...