pefu: Wert eines XML-Elements mit XSLT ersetzen

Hi all,

Ich möchte mit XSLT den Wert INPUTVALUE des folgenden XML Dokuments mit OUTPUTVALUE ersetzen:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bas="http://myURL.de/DataTest_1_0">  
   <soapenv:Header/>  
   <soapenv:Body>  
      <bas:test_ping>  
         <bas:uecpirp1>  
            <bas:test>blah</bas:test>  
            <bas:data>INPUTVALUE</bas:data>  
         </bas:uecpirp1>  
      </bas:test_ping>  
   </soapenv:Body>  
</soapenv:Envelope>

Der Wert soll lediglich ersetzt werden, d.h. der Rest des XML-Dokuments soll unverändert bleiben.

Ich bin froh um jede Idee bzw. Gedankenanstoss!

Danke & Gruss,
pefu

  1. Hallo pefu,

    Der Wert soll lediglich ersetzt werden, d.h. der Rest des XML-Dokuments soll unverändert bleiben.

    Ich bin froh um jede Idee bzw. Gedankenanstoss!

    Identitäts-Transformation mit zusätzlichem Textknoten-Template:

    <?xml version="1.0" encoding="UTF-8"?>  
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
      
      <xsl:output method="xml" version="1.0" encoding="UTF-8"/>  
      
      <xsl:template match="@* | node()">  
        <xsl:copy>  
          <xsl:apply-templates select="@* | node()"/>  
        </xsl:copy>  
      </xsl:template>  
      
      <xsl:template match="text()[.='INPUTVALUE']">  
        <xsl:text>OUTPUTVALUE</xsl:text>  
      </xsl:template>  
      
    </xsl:stylesheet>
    

    Grüße,
    Thomas

    1. Hallo Thomas,

      Besten Dank, das klappt ja schonmal bestens! Leider habe ich in meine Frage nicht ganz exakt formuliert...
      Der Inhalt INPUTVALUE ist in jedem Request verschieden, befindet sich aber immer im gleichen XML Element <bas:data>INPUTVALUE</bas:data>
      In diesem Fall kann ich nicht mit match="text()[.'INPUTVALUE'] darauf zugreifen, oder? Vielmehr müsste ich anstatt auf den text auf den node zugreifen, oder?

      Vielen Dank & Gruss,
      pefu

      <?xml version="1.0" encoding="UTF-8"?>

      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      <xsl:output method="xml" version="1.0" encoding="UTF-8"/>

      <xsl:template match="@* | node()">
          xsl:copy
            <xsl:apply-templates select="@* | node()"/>
          </xsl:copy>
        </xsl:template>

      <xsl:template match="text()[.='INPUTVALUE']">
          xsl:textOUTPUTVALUE</xsl:text>
        </xsl:template>

      </xsl:stylesheet>

      
      
      1. Hallo pefu,

        Der Inhalt INPUTVALUE ist in jedem Request verschieden, befindet sich aber immer im gleichen XML Element <bas:data>INPUTVALUE</bas:data>

        <?xml version="1.0" encoding="UTF-8"?>  
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  
          xmlns:bas="http://myURL.de/DataTest_1_0">  
          
          <xsl:output method="xml" version="1.0" encoding="UTF-8"/>  
          
          <xsl:template match="@* | node()">  
            <xsl:copy>  
              <xsl:apply-templates select="@* | node()"/>  
            </xsl:copy>  
          </xsl:template>  
          
          <xsl:template match="bas:data/text()[.='INPUTVALUE']">  
            <xsl:text>OUTPUTVALUE</xsl:text>  
          </xsl:template>  
          
        </xsl:stylesheet>
        

        Grüße,
        Thomas

        1. Thomas, vielen Dank!
          So klappt nun alles prima.

          Gruss,
          pefu