Работа с функцией document () для преобразования из 2 исходных файлов XML в 1 целевой файл - PullRequest
1 голос
/ 08 сентября 2010

У меня есть два xml документа: один как исходный файл и один как файл словаря. Потому что мне нужно реструктурировать исходный файл, а также объединить дополнительную информацию для каждого элемента в первом исходном файле. Я новичок в преобразовании XSL, поэтому это сложное задание для меня. Я думаю, что кто-то может помочь мне решить эту проблему. - Во-первых, я не знаю, как обращаться с $ ID в файле словаря. - Во-вторых, я не знаю, как бороться с иерархической структурой в процессе трансформации. Первый файл (исходный файл 1)

<?xml version="1.0" encoding="UTF-8"?>
<container id="111A" name="DEFAULT HARDDISK">
    <list_of_folder id="listofcontainer_111A">
        <folder id="222A">
            <fileRef>3332</fileRef>
            <fileRef>3333</fileRef>
        </folder>
        <folder id="222B">
            <fileRef>3331</fileRef>
            <fileRef>3335</fileRef>
            <fileRef>3336</fileRef>
            <fileRef>3334</fileRef>
            <fileRef>3337</fileRef>
        </folder>
    </list_of_folder>
    <coreldraw id="3332" name="model1"/>
    <photoshop id="3331" name="model2" />
    <excel id="3336" name="schedule" /> 
    <access id="3335" name="program1" />    
    <mp3 id="3333" name="hello song" /> 
    <mp4 id="3337" name="pop music" />  
    <wmv id="3334" name="rock rock music" />    
</container>

файл словаря, который определяет более подробную информацию о главном элементе (исходный файл 2)

<?xml version="1.0" encoding="UTF-8"?>
<definition id="MANAGE_STORAGE">
    <def id="HARDDISK" class="HARDDISK" drag= "editAttributeDblClk(evt,'$ID');MouseDown(evt);">
        <def transform=" size(200 200)"/>
        <def  transform="size(-25,100)" textgroup="yes">
            <text  x="0" y="0" style="ABC" transform="rotate(270)">
                <tspan>DEFAULT HARDDISK</tspan>
            </text>
        </def>
        <def id="FOLDERS_$ID" class ="FOLDERS"/>
    </def>
    <def id="FOLDER" class=" FOLDER" drag= "editAttributeDblClk(evt,'$ID');MouseDown(evt);">
        <def transform=" size100 100)"/>
        <def  transform="size(-25,100)" textgroup="yes">
            <text  x="0" y="0" style="BCD" transform="rotate(270)">
                <tspan>DEFAULT FOLDER</tspan>
            </text>
        </def>  
        <def id="GRAPHICS_$ID" class ="GRAPHICS"/>
        <def id="OFFICES_$ID" class ="OFFICES"/>
        <def id="MUSICS_$ID" class ="MUSICS"/>
        <def id="VIDEOS_$ID" class ="VIDEOS"/>          
    </def>
    <def id ='CORELDRAW' class="CORELDRAW">
        <def transform=" size(90 70)"/>
        <def  transform="size(-25,100)" textgroup="yes">
            <text  x="0" y="0" style="BCD" transform="rotate(270)">
                <tspan>CORELDRAW FILE</tspan>
            </text>
        </def>  
    </def>
    <def id ='PHOTOSHOP' class="PHOTOSHOP">
        <def transform=" size(90 70)"/>
        <def  transform="size(-25,100)" textgroup="yes">
            <text  x="0" y="0" style="BCWD" transform="rotate(270)">
                <tspan>PHOTOSHOP FILE</tspan>
            </text>
        </def>  
    </def>
    <def id ='MP3' class="MP3">
        <def transform=" size(70 70)"/>
        <def  transform="size(-25,100)" textgroup="yes">
            <text  x="0" y="0" style="BWCD" transform="rotate(270)">
                <tspan>MP3 FILE</tspan>
            </text>
        </def>  
    </def>
    <def id ='MP4' class="MP4">
        <def transform=" size(80 90)"/>
        <def  transform="size(-25,100)" textgroup="yes">
            <text  x="0" y="0" style="WBCD" transform="rotate(270)">
                <tspan>MP4 FILE</tspan>
            </text>
        </def>  
    </def>
    <def id ='WMV' class="WMV">
        <def transform=" size(80 90)"/>
        <def  transform="size(-25,100)" textgroup="yes">
            <text  x="0" y="0" style="BCD" transform="rotate(270)">
                <tspan>WMV FILE</tspan>
            </text>
        </def>  
    </def>
    <def id ='ACCESS' class="ACCESS">
        <def transform=" size100 50)"/>
        <def  transform="size(-25,100)" textgroup="yes">
            <text  x="0" y="0" style="BCD" transform="rotate(270)">
                <tspan>ACCESS FILE</tspan>
            </text>
        </def>  
    </def>
    <def id ='EXCEL' class="EXCEL">
        <def transform=" size100 50)"/>
        <def  transform="size(-25,100)" textgroup="yes">
            <text  x="0" y="0" style="BCD" transform="rotate(270)">
                <tspan>EXCEL FILE</tspan>
            </text>
        </def>  
    </def>
</definition>

целевой файл станет таким:

<?xml version="1.0" encoding="UTF-8"?>
<def id="MANAGE_STORAGE" transform="scale(1)">
    <def id="HARDDISKS" class="HARDDISKS">
        <def id="111A" class="HARDDISK" drag= "editAttributeDblClk(evt,'$ID');MouseDown(evt);">
            <def transform=" size(200 200)"/>
            <def  transform="size(-25,100)" textgroup="yes">
                <text  x="0" y="0" style="ABC" transform="rotate(270)">
                    <tspan>DEFAULT HARDDISK</tspan>
                </text>
            </def>
            <def id="FOLDERS_111A" class ="FOLDERS">
                <def id="222A" class="FOLDER" drag= "editAttributeDblClk(evt,'$ID');MouseDown(evt);">
                        <def transform=" size100 100)"/>
                        <def  transform="size(-25,100)" textgroup="yes">
                            <text  x="0" y="0" style="BCD" transform="rotate(270)">
                                <tspan> FOLDER 1</tspan>
                            </text>
                        </def>                  
                        <def id="GRAPHICS_222A" class ="GRAPHICS">
                            <def id ='3332' class="CORELDRAW">
                                <def transform=" size(90 70)"/>
                                <def  transform="size(-25,100)" textgroup="yes">
                                    <text  x="0" y="0" style="BCD" transform="rotate(270)">
                                        <tspan>model1</tspan>
                                    </text>
                                </def>  
                            </def>                                              
                        </def>
                        <def id="OFFICES_222A" class ="OFFICES"/>                           
                        <def id="MUSICS_222A" class ="MUSICS">
                            <def id ='3333' class="MP3">
                                <def transform=" size(70 70)"/>
                                <def  transform="size(-25,100)" textgroup="yes">
                                    <text  x="0" y="0" style="BWCD" transform="rotate(270)">
                                        <tspan>hello song</tspan>
                                    </text>
                                </def>  
                            </def>
                        </def>
                        <def id="VIDEOS_222A" class ="VIDEOS"/>
                </def>          
                <def id="222B" class="FOLDER" drag= "editAttributeDblClk(evt,'$ID');MouseDown(evt);">
                    <def transform=" size100 100)"/>
                    <def  transform="size(-25,100)" textgroup="yes">
                        <text  x="0" y="0" style="BCD" transform="rotate(270)">
                            <tspan> FOLDER 2</tspan>
                        </text>
                    </def>                  
                    <def id="GRAPHICS_222B" class ="GRAPHICS">
                        <def id ='3331' class="PHOTOSHOP">
                            <def transform=" size(90 70)"/>
                            <def  transform="size(-25,100)" textgroup="yes">
                                <text  x="0" y="0" style="BCWD" transform="rotate(270)">
                                    <tspan>model2</tspan>
                                </text>
                            </def>  
                        </def>                      
                    </def>
                    <def id="OFFICES_222B" class ="OFFICES">
                        <def id ='3335' class="ACCESS">
                            <def transform=" size100 50)"/>
                            <def  transform="size(-25,100)" textgroup="yes">
                                <text  x="0" y="0" style="BCD" transform="rotate(270)">
                                    <tspan>program1</tspan>
                                </text>
                            </def>  
                        </def>
                        <def id ='3336' class="EXCEL">
                            <def transform=" size100 50)"/>
                            <def  transform="size(-25,100)" textgroup="yes">
                                <text  x="0" y="0" style="BCD" transform="rotate(270)">
                                    <tspan>schedule</tspan>
                                </text>
                            </def>  
                        </def>
                    </def>
                    <def id="MUSICS_222B" class ="MUSICS"/>                     
                    <def id="VIDEOS_222B" class ="VIDEOS">
                        <def id ='3337' class="MP4">
                            <def transform=" size(80 90)"/>
                            <def  transform="size(-25,100)" textgroup="yes">
                                <text  x="0" y="0" style="WBCD" transform="rotate(270)">
                                    <tspan>pop music</tspan>
                                </text>
                            </def>  
                        </def>
                        <def id ='3334' class="WMV">
                            <def transform=" size(80 90)"/>
                            <def  transform="size(-25,100)" textgroup="yes">
                                <text  x="0" y="0" style="BCD" transform="rotate(270)">
                                    <tspan>rock rock music</tspan>
                                </text>
                            </def>  
                        </def>
                    </def>
                </def>
            </def>
            <def id="SHOTCUTS_111A" class ="SHOTCUTS"/>
        </def>
    </def>
</def>

Итак, я знаю, что мне приходится иметь дело с функцией document (), которая объявлена ​​как переменная в файле преобразования. Но мне нужно знать, как объединить и реструктурировать из двух исходных файлов XML в 1 целевой файл XML. Кто-нибудь поможет мне? Любая помощь приветствуется. Или вы могли бы показать мне кое-что для решения этой проблемы? Или вы можете помочь мне определить алгоритм этого преобразования. Большое спасибо

1 Ответ

0 голосов
/ 22 февраля 2011
<xsl:value-of select="document('definitions.xml')/definitions/def[@id = 'someID']"/>

Конечно, вы должны поместить document('foo.xml') result в переменную верхнего уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...