2010-11-02 16 views
5

Używam XSLT i XML.Jak czytać komentarze z XML przy użyciu xslt i dodawać komentarze tekstowe w elemencie

Mam poniżej XML ze mną.

<?xml version="1.0" encoding="UTF-8"?> 
<mappings> 
    <!-- News mapping --> 
    <mapping old="mbp" new="/SessionHandler.aspx?pageurl=/BP.aspx&amp;pub=/english&amp;section=IBE&amp;j=f"/> 
    <mapping old="about/news" new="about/news/news.aspx"/> 
    <!-- CUGO's--> 
    <mapping old="/nhs" new="/cugo.aspx?promoCode=UKNHS01&amp;pub=/uk/english"/> 
    <mapping old="/hk/ukstudentfare" new="/cugo.aspx?promoCode=HKSTU10&amp;pub=/hk/Chinese"/> 
    <!-- Reserved below vanity URL's --> 
    <mapping old="/kgfmastercard" new=""/> 
    <mapping old="/mastercard" new=""/> 
    <!-- Other vanity URL's--> 
    <mapping old="/destinationbriefs" new="http://www.ekgroup.com/destinationbriefs"/> 
    <mapping old="/win" new="/ch/german/destinations_offers/win_two_tickets_on_A380.aspx"/> 
    <!--FIFA Fan Fest--> 
    <mapping old="/romefanfest" new="/it/italian/destinations_offers/rome_international_fifa_fan_fest.aspx"/> 
    <mapping old="/parisfanfest" new="/fr/french/destinations_offers/paris_international_fifa_fan_fest.aspx"/> 
</mappings> 

Poniżej XSLT Używam

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="xsl fo"> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:template match="/"> 
    <xsl:for-each select="mappings/mapping"> 
     <VanityUrl> 
     <old> 
      <xsl:value-of select="@old" /> 
     </old> 
     <new> 
      <xsl:value-of select="@new" /> 
     </new> 
     <dateAdded>2010-05-03T14:45:00</dateAdded> 
     <xsl:if test="@new = ''"> 
      <NotLive>Yes</NotLive> 
     </xsl:if> 
     <xsl:if test="preceding-sibling::comment()"> 
      <comments> 
      <xsl:value-of select="preceding-sibling::comment()" /> 
      </comments> 
     </xsl:if> 
     </VanityUrl> 
    </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

Teraz to, co staram się uzyskać wynik jak poniżej:

<VanityUrl> 
     <old>/mbp</old> 
     <new>/SessionHandler.aspx?pageurl=/BP.aspx&amp;pub=/english&amp;section=IBE&amp;j=f</new> 
     <dateAdded>2010-05-03T14:45:00 </dateAdded> 
     <comment>News mapping</comments>   
</VanityUrl> 
<VanityUrl> 
     <old>about/news</old> 
     <new>about/news/news.aspx</new> 
     <dateAdded>2010-05-03T14:45:00 </dateAdded> 
     <comment>News mapping</comments>   
</VanityUrl> 
<VanityUrl> 
     <old>/nhs</old> 
     <new>/cugo.aspx?promoCode=UKNHS01&amp;pub=/uk/english</new> 
     <dateAdded>2010-05-03T14:45:00 </dateAdded> 
     <comment>CUGO's</comments>  
</VanityUrl> 
<VanityUrl> 
     <old>/hk/ukstudentfare</old> 
     <new>/cugo.aspx?promoCode=HKSTU10&amp;pub=/hk/Chinese</new> 
     <dateAdded>2010-05-03T14:45:00 </dateAdded> 
     <comment>CUGO's</comments>  
</VanityUrl> 
<VanityUrl> 
     <old>/kgfmastercard</old> 
     <new></new> 
     <NotLive>yes</NotLive> 
     <dateAdded>2010-05-03T14:45:00 </dateAdded> 
     <comment>Reserved below vanity URL's</comments>  
</VanityUrl> 
<VanityUrl> 
     <old>/mastercard</old> 
     <new></new> 
     <NotLive>yes</NotLive> 
     <dateAdded>2010-05-03T14:45:00 </dateAdded> 
     <comment>Reserved below vanity URL's</comments>  
</VanityUrl> 

Wszystko jest ok, ale nie jestem w stanie pracować w sekcji komentarzy, w jaki sposób mogę dodać elementy komentarzy do powiązanych komentarzy. Znaczy poniżej kod w moim XSLT nie działa prawidłowo, tylko jego dodając pierwszy komentarz mapping czyli Aktualności

xsl:if test="preceding-sibling::comment()"> 
       <comments> 
       <xsl:value-of select="preceding-sibling::comment()" /> 
       </comments> 
      </xsl:if> 
+0

Dzięki! Używam xmlSpy –

Odpowiedz

10

preceding-sibling::comment() daje zestaw węzłów wszystkich poprzednich węzłów komentarz na obecnym poziomie w odwrotnej kolejności dokumentu. Musisz jednak wybrać najbliższy komentarz, aby działał:

<xsl:if test="preceding-sibling::comment()[1]"> 
    <comments> 
    <xsl:value-of select="preceding-sibling::comment()[1]" /> 
    </comments> 
</xsl:if> 
+0

Dzięki @ 0xA3, to zadziałało dla mnie Wiwaty !! –

+0

+1 dla poprawnej odpowiedzi. –

+0

+1 Prawidłowa odpowiedź. –

Powiązane problemy