2014-01-13 59 views
-2
<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="stylexslt3.xslt"?> 
<team> 
    <teaminfo> 
     <logo source="logomym.jpg"/> 
     <teampage address="http://www.site.com/"/> 
     <name> Team name </name> 
     <team_photo source="teamphoto.jpg"/> 
     <game> Game1 </game> 
     <achievements> 
      <premiere_tournaments> 
       <tournament> 
        <logoevent source="event1.jpg"/> 
        <tournament_name> tournament name </tournament_name> 
        <placing> 1 </placing> 
        <prize_pool> 
         <earned_prize> 10600 </earned_prize> 
         <average_prize> 4454 </average_prize> 
        </prize_pool> 
       </tournament> 
       <tournament> 
        <logoevent source="event2.jpg"/> 
        <tournament_name> tournament name </tournament_name> 
        <placing> 3 </placing> 
        <prize_pool> 
         <earned_prize> 10600 </earned_prize> 
         <average_prize> 4454 </average_prize> 
        </prize_pool> 
       </tournament> 

      </premiere_tournaments> 

     </achievements> 
    </teaminfo> 
    <captain> 
     <nick>Player1</nick> 
     <role> Def </role> 
     <captain_since>2011-01-14</captain_since> 
     <Country>Country</Country> 
    </captain> 

    <player> 
     <player_level>A-</player_level> 
     <player_info streamer="y"> 
      <photo source="playerphoto.jpg"/> 
      <nick>Playerino</nick> 
      <rola>Att</rola> 
      <style>roamer</style> 
      <opinion_patch>Positive</opinion_patch> 
      <fanpage adres="http://facebook.com/playerFanPage"/> 
      <playergrade grade="Good"/> 
     </player_info> 
     <personal> 
      <name>Matt</name> 
      <surname>Kuk</surname> 
      <age>22</age> 
      <country>Counter</country> 
     </personal> 
    </player> 
    <player> 
     <player_level>A-</player_level> 
     <player_info streamer="y"> 
      <photo source="playerphoto.jpg"/> 
      <nick>Playerino</nick> 
      <rola>Att</rola> 
      <style>roamer</style> 
      <opinion_patch>Positive</opinion_patch> 
      <fanpage adres="http://facebook.com/playerFanPage"/> 
      <playergrade grade="Good"/> 
     </player_info> 
     <personal> 
      <name>Matt</name> 
      <surname>Kuk</surname> 
      <age>22</age> 
      <country>Counter</country> 
     </personal> 
    </player> 
    <sponsors> 
     <sponsor> 
      <companyname>Compname</companyname> 
      <support_type>Periph, ads</support_type> 
      <sponsor_page official_page="http://link.com"/> 
      <fanpage fan_strona="http://lin43k.com"/> 
     </sponsor> 
    </sponsors> 
    <perip> 
     <mouse> mouse </mouse> 
     <keyboard> keyboard </keyboard> 
     <headphones> headphones </headphones> 
    </perip> 
</team> 

我一直在用這個可怕的東西整夜奮戰,不幸的是,網絡上的材料數量並沒有爲我提供滿意的方法來解決我的問題。我想通過xslt進行xml文件的「轉換」。我想這樣做,以改變它的結構和可能的屬性或元素的名稱。通過XSLT將XML轉換爲XML

我要實現類似這樣的東西:

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="stylexslt3.xslt"?> 
<team> 
    <teaminfo> 
     <logo source="logomym.jpg"/> 
     <teampage address="http://www.site.com/"/> 
     <name> Team name </name> 
     <team_photo source="teamphoto.jpg"/> 
     <game> Game1 </game> 
    </teaminfo> 
    <achievements> 
     <premiere_tournaments> 
      <tournament> 
       <logoevent source="event1.jpg"/> 
       <tournament_name> tournament name </tournament_name> 
       <placing> 1 </placing> 
       <prize_pool> 
        <earned_prize> 10600 </earned_prize> 
        <average_prize> 4454 </average_prize> 
       </prize_pool> 
      </tournament> 
      <tournament> 
       <logoevent source="event2.jpg"/> 
       <tournament_name> tournament name </tournament_name> 
       <placing> 3 </placing> 
       <prize_pool> 
        <earned_prize> 10600 </earned_prize> 
        <average_prize> 4454 </average_prize> 
       </prize_pool> 
      </tournament> 

     </premiere_tournaments> 

    </achievements> 

    <player> 
     <nick>Player1</nick> 
     <role> Def </role> 
     <captain_since>2011-01-14</captain_since> 
     <Country>Country</Country> 
    </player> 
    <player> 
     <player_level>A-</player_level> 
     <player_info streamer="y"> 
      <photo source="playerphoto.jpg"/> 
      <nick>Playerino</nick> 
      <rola>Att</rola> 
      <style>roamer</style> 
      <opinion_patch>Positive</opinion_patch> 
      <fanpage adres="http://facebook.com/playerFanPage"/> 
      <playergrade grade="Good"/> 
     </player_info> 
     <personal> 
      <name>Matt</name> 
      <surname>Kuk</surname> 
      <age>22</age> 
      <country>Counter</country> 
     </personal> 
    </player> 
    <player> 
     <player_level>A-</player_level> 
     <player_info streamer="y"> 
      <photo source="playerphoto.jpg"/> 
      <nick>Playerino</nick> 
      <role>Att</role> 
      <style>roamer</style> 
      <opinion_patch>Positive</opinion_patch> 
      <fanpage adres="http://facebook.com/playerFanPage"/> 
      <playergrade grade="Good"/> 
     </player_info> 
     <personal> 
      <name>Matt</name> 
      <surname>Kuk</surname> 
      <age>22</age> 
      <country>Counter</country> 
     </personal> 
    </player> 
</team> 

此外,如果可能的話請包括方法改變元素的名稱。我試圖用多種不同的方法做到這一點,但它似乎或者我發現的方法不正確,或者我無法弄清楚如何正確使用它們。現在我不會發布我的xslt,因爲它瘋狂地被屠殺了。

+3

我投票結束這個問題。請嘗試在較小的部分分解您的問題,並將其單獨發佈爲問題。 _總是包括,到目前爲止,你已經嘗試了什麼,以及你認爲自己被困住了。一般而言,可能由answerers生成的幾百個SLOC長XSLT樣式表不在StackOverflow的範圍內。 – Boldewyn

+2

有了這樣的問題,您應該以XSLT標識轉換爲基礎。請參閱http://en.wikipedia.org/wiki/Identity_transform。然後,看看http://stackoverflow.com/questions/17920639/rename-element-and-retain-attributes和http://stackoverflow.com/questions/4781182/xslt-to-remove-elements-from- xml告訴你如何重命名元素,並分別移除元素。這應該爲你寫一些更精簡的XSLT的道路。 –

+0

使用一致的縮進格式重新格式化XML;第二個示例中添加了缺少結束標記。 –

回答

0

你沒有明確說明第一個和第二個例子之間有什麼變化(即使它瘋狂屠宰,你也應該展示你的工作),但是從我已經能夠辨別出來的:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
    <xsl:strip-space elements="*" /> 

    <!-- Identity transform --> 
    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="teaminfo"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()[not(self::achievements)]" /> 
    </xsl:copy> 
    <!-- Move achievements to after teaminfo--> 
    <xsl:apply-templates select="achievements" /> 
    </xsl:template> 

    <!-- Rename captain to player --> 
    <xsl:template match="captain"> 
    <player> 
     <xsl:apply-templates select="@* | node()" /> 
    </player> 
    </xsl:template> 

    <!-- Omit sponsors and perip --> 
    <xsl:template match="sponsors | perip" /> 
</xsl:stylesheet> 

有什麼我錯過了嗎?