Необходимо разработать иерархическую структуру из плоского файла, используя два идентификатора в Input XML - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь разработать иерархическую структуру из простого файла, поэтому мне нужно установить sh родительские дочерние отношения в желаемом выводе. Не могли бы вы предложить метод в XSLT 2.0.

Пожалуйста, найдите под входом XML, который содержит теги LEVEL и IDENTIFY, на основе которых я пытался построить отношения родитель-потомок.

Все теги IDENTIFY с 'IB' должны быть в отдельном теге, таком как LOCATION, а все теги IDENTIFY с 'ER' должны быть в отдельном теге, например, ADDRESS в выходных данных.

Input XML:

<Path>
<item>
<LEVEL>1</LEVEL>
<RANK>340</RANK>
<TYPE>T</TYPE>
<DESC>Sheet</DESC>
<NAME>I</NAME>
<IDENTIFY>IB</IDENTIFY>
</item>
<item>
<LEVEL>2</LEVEL>
<RANK/>
<TYPE>M</TYPE>
<DESC> Handler</DESC>
<NAME>D</NAME>
<IDENTIFY></IDENTIFY>
</item>
<item>
<LEVEL>2</LEVEL>
<RANK>341</RANK>
<TYPE>M</TYPE>
<DESC>handler </DESC>
<NAME>I</NAME>
<IDENTIFY>IB</IDENTIFY>
</item>
<item>
<LEVEL>3</LEVEL>
<RANK/>
<TYPE>M</TYPE>
<DESC>pdf</DESC>
<NAME>D</NAME>
<IDENTIFY></IDENTIFY>
</item>
<item>
<LEVEL>3</LEVEL>
<RANK>330</RANK>
<TYPE>M</TYPE>
 <DESC>SERVO </DESC>
<NAME>L</NAME>
<IDENTIFY>ER</IDENTIFY>
</item>
<item>
<LEVEL>3</LEVEL>
<RANK>331</RANK>
<TYPE>M</TYPE>
<DESC>SENSOR</DESC>
<NAME>L</NAME>
<IDENTIFY>ER</IDENTIFY>
</item>
<item>
<LEVEL>2</LEVEL>
<RANK>342</RANK>
<TYPE>M</TYPE>
<DESC>xyz</DESC>
<NAME>I</NAME>
<IDENTIFY>IB</IDENTIFY>
</item>
<item>
<LEVEL>3</LEVEL>
<RANK>335</RANK>
<TYPE>M</TYPE>
<DESC>FILTER</DESC>
<NAME>L</NAME>
<IDENTIFY>ER</IDENTIFY>
</item>
<item>
<LEVEL>2</LEVEL>
<RANK>343</RANK>
<TYPE>M</TYPE>
<DESC>safety </DESC>
<NAME>I</NAME>
<IDENTIFY>IB</IDENTIFY>
</item>
<item>
<LEVEL>3</LEVEL>
<RANK/>
<TYPE>M</TYPE>
<DESC>doc</DESC>
<NAME>D</NAME>
<IDENTIFY></IDENTIFY>
</item>
<item>
<LEVEL>3</LEVEL>
<RANK>337</RANK>
<TYPE>M</TYPE>
<DESC>ROD </DESC>
<NAME>L</NAME>
<IDENTIFY>ER</IDENTIFY>
</item>
<item>
<LEVEL>3</LEVEL>
<RANK>338</RANK>
<TYPE>M</TYPE>
<DESC>CYL</DESC>
<NAME>L</NAME>
<IDENTIFY>ER</IDENTIFY>
</item>
<item>
<LEVEL>3</LEVEL>
<RANK>339</RANK>
<TYPE>M</TYPE>
<DESC>COMPRESSION </DESC>
<NAME>L</NAME>
<IDENTIFY>ER</IDENTIFY>
</item>
<item>
<LEVEL>2</LEVEL>
<RANK>345</RANK>
<TYPE>M</TYPE>
<DESC>Nylon</DESC>
<NAME>I</NAME>
<IDENTIFY>ER</IDENTIFY>
</item>
</Path>

Требуемый выход:

    <LOCATION>
        <LEVEL>1</LEVEL>
        <RANK>340</RANK>
        <TYPE>T</TYPE>
        <DESC>Sheet</DESC>
        <NAME>I</NAME>
    </LOCATION>
            <LOCATION>
            <LEVEL>2</LEVEL>
            <RANK/>
            <TYPE>M</TYPE>
            <DESC> Handler</DESC>
            <NAME>D</NAME>
            </LOCATION>
            <LOCATION>
            <LEVEL>2</LEVEL>
            <RANK>341</RANK>
            <TYPE>M</TYPE>
            <DESC> handler </DESC>
            <NAME>I</NAME>
            </LOCATION>
                <ADDRESS>
                    <LEVEL>3</LEVEL>
                    <RANK/>
                    <TYPE>M</TYPE>
                    <DESC>pdf</DESC>
                    <NAME>D</NAME>
                </ADDRESS>
                <ADDRESS>
                    <LEVEL>3</LEVEL>
                    <RANK>330</RANK>
                    <TYPE>M</TYPE>
                    <DESC>pqr</DESC>
                    <NAME>L</NAME>
                </ADDRESS>
                <ADDRESS>
                    <LEVEL>3</LEVEL>
                    <RANK>331</RANK>
                    <TYPE>M</TYPE>
                     <DESC>SENSOR</DESC>
                    <NAME>L</NAME>
                </ADDRESS>
            <LOCATION>
                <LEVEL>2</LEVEL>
                <RANK>342</RANK>
                <TYPE>M</TYPE>
                 <DESC>xyz</DESC>
                <NAME>I</NAME>
            </LOCATION>
                <ADDRESS>
                    <LEVEL>3</LEVEL>
                    <RANK>335</RANK>
                    <TYPE>M</TYPE>
                    <DESC>TER</DESC>
                    <NAME>L</NAME>
                </ADDRESS>
            <LOCATION>
                <LEVEL>2</LEVEL>
                <RANK>343</RANK>
                <TYPE>M</TYPE>
                <DESC>SAFE</DESC>
                <NAME>I</NAME>
            </LOCATION>
                <ADDRESS>
                    <LEVEL>3</LEVEL>
                    <RANK/>
                    <TYPE>M</TYPE>
                    <DESC>doc</DESC>
                    <NAME>D</NAME>
                </ADDRESS>
                <ADDRESS>
                    <LEVEL>3</LEVEL>
                    <RANK>337</RANK>
                    <TYPE>M</TYPE>
                     <DESC>RST/DESC>
                    <NAME>L</NAME>
                </ADDRESS>
                <ADDRESS>
                    <LEVEL>3</LEVEL>
                    <RANK>338</RANK>
                    <TYPE>M</TYPE>
                      <DESC>CYL</DESC>
                    <NAME>L</NAME>
                </ADDRESS>
                <ADDRESS>
                    <LEVEL>3</LEVEL>
                    <RANK>339</RANK>
                    <TYPE>M</TYPE>
                    <DESC>COMP</DESC>
                    <NAME>L</NAME>
                </ADDRESS>
            <LOCATION>
                <LEVEL>2</LEVEL>
                <RANK>345</RANK>
                <TYPE>M</TYPE>
                <DESC>Nyl</DESC>
                <NAME>I</NAME>
            </LOCATION>

...