2010-11-02 11 views
5

Sto usando XSLT e XML.Come leggere commenti da XML usando xslt e aggiungere commenti testo in un elemento

Ho sotto XML con me.

<?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> 

riportano di seguito le XSLT che sto usando

<?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> 

Ora quello che sto cercando di risultato ottenere come di seguito:

<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> 

Tutto è ok, ma io non sono in grado di lavorare con la sezione commenti, come posso aggiungere gli elementi dei commenti in base ai commenti relativi. Voglio dire al di sotto codice nel mio XSLT non funziona correttamente, la sua aggiungendo primo commento solo cioè Notizie mappatura

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

Grazie! Sto usando xmlSpy –

risposta

10

preceding-sibling::comment() ti dà un set di nodi di tutti commento precedenti nodi sul livello corrente in ordine documento inverso. Tuttavia, è necessario selezionare il commento più vicino per farlo funzionare:

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

Grazie @ 0xA3, Ha funzionato per me Cheers !! –

+0

+1 per una risposta corretta. –

+0

+1 Risposta corretta. –

Problemi correlati