Announcement

Collapse
No announcement yet.

Zuviele Leerzeilen nach Transformation

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zuviele Leerzeilen nach Transformation

    Hallo,

    ich habe, hier vereinfacht dargestellt, eine XML-Datei mit folgender Struktur. Aus dieser sollen bestimmte Tags entfernt, der Rest erhalten bleiben:

    <tag1>bla</tag1>
    <tag2>bla</tag2>
    <tag3>bla</tag3>
    <tag4>bla</tag4>

    Wenn ich tag1 und tag2 "entfernen" will, klappt das ja indem ich ein Template der Art:

    <xsl:template match="tagname">

    </xsl:template> erstelle.

    Damit der Rest in die Ausgabe einfliesst, nutze ich folgende Regel:

    <xsl:template match="node() | @*">

    <xsl:copy>

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

    </xsl:copy>

    </xsl:template>

    Das klappt soweit auch. Jedoch da wo vorher die Tags waren, ist nun eine Leerzeile bzw. da 2 Tags entfernt 2 Leerzeilen vorhanden, d.h. die Ausgabe sieht in etwa so aus:

    <tag1>bla</tag1>


    <tag4>bla</tag4>

    Das Ergebnis soll aber in der Form:

    <tag1>bla</tag1>
    <tag4>bla</tag4> vorliegen.

    Ich habe es auch schon mit xsl:strip-space versucht, dies entfernt aber auch die erwünschten Leerzeilen, erzeugt also

    <tag1>bla</tag1><tag4>bla</tag4>


    Hat jemand eine Idee was da falsch läuft???

  • #2
    Gib die Leerzeilen einfach nicht aus mittels <xsl:template match="tagname"/>.

    Comment


    • #3
      Hallo,

      habe das soweit gemacht, die Leerzeilen bleiben aber trotz match.../>

      Comment


      • #4
        Dann liegt es wohl am Leerraum innerhalb von xsl:copy.

        Comment


        • #5
          das problem liegt in der eingangs xml

          Code:
          <?xml version="1.0" encoding="UTF-8"?>
          <root>
          	<tag1>bla
          </tag1>
          	<tag2>bla
          </tag2>
          	<tag3>bla
          </tag3>
          	<tag4>bla
          </tag4>
          </root>
          browser zeigt
          Code:
          <?xml version="1.0" encoding="UTF-8" ?> 
          - <root>
            <tag1>bla</tag1> 
            <tag2>bla</tag2> 
            <tag3>bla</tag3> 
            <tag4>bla</tag4> 
            </root>

          der linefeed wird nicht angezeigt


          Code:
          <?xml version="1.0" encoding="UTF-8"?>
          <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
              <xsl:output indent="yes" method="xml" encoding="utf-8"/>
              
              <xsl:template match="/">
                  <root>
                      <xsl:apply-templates select="child::root/*"/>
                  </root>
              </xsl:template>
              
              <xsl:template match="node()">
                 
                  
              </xsl:template>
              <xsl:template match="tag1|tag4">
                  <xsl:element name="{local-name(.)}">
                      <xsl:value-of select="normalize-space(.)"/>
                      <!-- falls attribute 
                          <xsl:attribute name="id">
                          <xsl:value-of select="./@id"/>
                          </xsl:attribute>-->
                  </xsl:element>
              </xsl:template>
             
          </xsl:stylesheet>
          damit sollte es gehen

          Comment


          • #6
            Für die Normalisierung der Textknoten sollte dieses zusätzliche Template reichen:
            Code:
            <xsl:template match="text()">
              <xsl:value-of select="normalize-space(.)"/>
            </xsl:template>

            Comment

            Working...
            X