2010-11-02 34 views
5

Estoy usando XSLT y XML.Cómo leer comentarios de XML utilizando xslt y agregar texto de comentarios en un elemento

Tengo debajo de XML conmigo.

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

A continuación se muestra el XSLT estoy 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> 

Ahora lo que estoy tratando de conseguir el resultado, como a continuación:

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

Todo es aceptable, pero no soy capaz de trabajar con la sección de comentarios, ¿cómo puedo agregar los elementos de comentarios de acuerdo a los comentarios relacionados? Me refiero a continuación el código en mi XSLT no funciona correctamente, sólo su adición primer comentario es decir, Noticias mapeo

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

Thanks! Estoy usando xmlSpy –

Respuesta

10

preceding-sibling::comment() le da un conjunto de nodos de todos los nodos de comentarios anteriores sobre el nivel actual en fin documento inversa. Sin embargo, debe elegir el comentario más cercano para que funcione:

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

Gracias @ 0xA3, funcionó para mí ¡Saludos! –

+0

+1 para una respuesta correcta. –

+0

+1 Respuesta correcta. –

Cuestiones relacionadas