Decir que tengo un gran archivo XML con la siguiente estructura:

<MyXml>
  <Data1>
    <Node1>1234</Node1>
    <Node2>abc<Node2>
    <Node3>gfdf</Node3>
    ...
    <Node10000>more text</Node10000>
  </Data1>
  <Data2>
    ...
  </Data2>
</MyXml>

Quiero transformar este XML en otro XML que se ve exactamente la misma, pero tiene una cierta cadena de concatinated a un determinado nodo, es decir Node766. Estoy usando XSLT, por supuesto, y me preguntaba cómo me puede decir que copiar everyhing como-es, excepto para Node766, donde tengo que hacer algo antes de imprimirla.

InformationsquelleAutor del.ave | 2011-05-03

2 Comentarios

  1. 65
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
    <!--Identity template, 
            provides default behavior that copies all content into the output -->
        <xsl:template match="@*|node()">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:template>
    
        <!--More specific template for Node766 that provides custom behavior -->
        <xsl:template match="Node766">  
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
                <!--Do something special for Node766, like add a certain string-->
                <xsl:text> add some text </xsl:text>
            </xsl:copy>
        </xsl:template>
    
    </xsl:stylesheet>
    • +1 para una respuesta correcta. Yo pondría la plantilla de la identidad primera.
    • buen punto. Poner la plantilla de la identidad de la primera de modo que si alguna de las otras plantillas tienen el mismo partido prioridad, «ganar», porque son los últimos en el orden del documento.
    • No sólo esto, sino que si la plantilla de la identidad está en la parte superior, que es el más visible y el código se vuelve más comprensible.
    • Trabajó como un encanto. Gracias
    • +1: la Misma respuesta que la mía, pero con más trabajo suministrado. Bien hecho!
    • He utilizado este ejemplo en mi código y casi hace lo que necesito. El único problema que tengo es que: <xsl:text> add some text </xsl:text> es la ADICIÓN de texto para el valor existente. ¿Cómo puedo reemplazar sólo que con el nuevo texto? Gracias
    • Dentro de la plantilla de la coincidencia de que el elemento que usted está tratando de personalizar, quitar el apply-templates desde el interior de si la copia, dejando solo el contenido que desea reemplazar con. El aplicar plantillas es la selección de los atributos y nodos secundarios y tratamiento con cualquiera de las plantillas de partido. En este caso es la plantilla de la identidad, que copia la coincidencia de nodo y, a continuación, llama apply-templates para alguno de sus atributos o de los niños.
    • Hansen – muchísimas Gracias !! Eso funcionó bien.
    • Esto funciona, pero sólo las salidas de contenido (como cadena) de XML original. ¿Cómo puedo hacer que las etiquetas visibles?

Dejar respuesta

Please enter your comment!
Please enter your name here