处理document()func以便从2个XML源文件转换为1个目标文件

时间:2010-09-08 12:30:51

标签: xslt

我有两个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 :(得分:0)

<xsl:value-of select="document('definitions.xml')/definitions/def[@id = 'someID']"/>

当然,您应该将document('foo.xml')结果放在顶级变量中。