2014-01-13 2 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 to 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

나는이 질문을 끝내기로 표결했다. 작은 부분으로 문제를 나누어 개별적으로 질문으로 게시하십시오. _ 항상 _ 포함하는 것, 지금까지 얻은 것, 시도한 것, 그리고 갇혀 있다고 생각하는 곳. 일반적으로 응답자가 생성 할 수있는 여러 개의 100 SLOC 긴 XSLT 스타일 시트는 StackOverflow의 범위에 포함되지 않습니다. – Boldewyn

+2

이와 같은 문제가 발생하면 XSLT ID 변환을 기반으로 구축해야합니다. 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> 

내가 빠진 것이 있습니까?