2014-01-13 216 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> 

有什么我错过了吗?