Announcement

Collapse
No announcement yet.

erst ein Tag löschen, danach das zweite geht irgenwie nicht

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

  • erst ein Tag löschen, danach das zweite geht irgenwie nicht

    Ich möchte die leeren <s/> und die leeren </p> löschen, aber das leere table:table-cell behalten. Ich kann das nicht gleichzeitig machen. Sondern mit zwei XSLTs. Das muss doch auch in einer xslt gehen oder???


    <?xml version="1.0" encoding="UTF-8"?>
    <root xmlns:table="blabla">
    <table:table-row>
    <table:table-cell>
    <p/>
    </table:table-cell>
    <table:table-cell>
    <p>
    <s/>
    </p>
    </table:table-cell>
    <table:table-cell>
    <p/>
    </table:table-cell>
    </table:table-row>
    <table:table-row>
    <table:table-cell>
    <p/>
    </table:table-cell>
    <table:table-cell>
    <p>sdfds</p>
    </table:table-cell>
    <table:table-cell>
    <p>
    <s/>
    </p>
    </table:table-cell>
    </table:table-row>
    </root>

    XSLT:

    <xsl:template match="s[not(node())]" priority="+1"/>
    <xsl:template match="p[not(node())]" priority="-5"/>

    so geht das schon mal nicht in einer xslt. vielleicht mit lauter ifs???

    kann da jemand mir weiterhelfen, mit meinem spärlichen XSLT wissen???

    vielen dank
    tamer
    Zuletzt editiert von Tamer; 12.11.2009, 23:11.

  • #2
    Naheliegend ist dieser Ansatz (alles 1:1 ausgeben, jedoch leere s- bzw. p-Elemente ignorieren):
    Code:
    <?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" indent="yes"/>
    
      <xsl:template match="@* | node()">
        <xsl:copy>
          <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
      </xsl:template>
    
      <xsl:template match="s[not(node())] | p[not(node())]"/>
    
    </xsl:stylesheet>

    Comment


    • #3
      Geht nicht :-(

      Huhu,

      das habe ich auch schon versucht. Ist ja glaub ich nichts anderes als,

      <xsl:template match="s[not(node())]"/>
      <xsl:template match="p[not(node())]"/>

      nur mit einem oder verknüpft.

      Hmm ich sehe irgendwie keine Möglichlichkeit, als das wirklich in 2 xslts zu schreiben.

      Ich glaube wenn s weg ist, erst dann kann man p weiterverarbeiten

      könnte man dann nicht einfach p löschen, egal was unter p steht?
      Aber <p>sdfsdf</p> brauche ich noch

      Danke viele Grüße,
      Tamer

      Comment


      • #4
        meine super idee geht auch nicht :-(

        <xsl:template match="//p[not(node())] | //parent::s"/>

        Das wär es gewesen.
        mit dem zweiten finde ich ja genau die eltern von dem s. Was in s steht ist mir jetzt auch egal. ich hätte auch

        <xsl:template match="//p[not(node())] | //parent::s[not(node())]"/>

        schreiben können. Aber die Eltern findet er mir nicht.
        Ist voll seltsam

        normalerweise geht das mit XPath 1.0 und 2.0

        //s/.. --> damit finde ich auch die eltern. Aber nein er zeigt mir ein fehler an

        Comment


        • #5
          Probiere:
          Code:
          <xsl:template match="s[not(node())] | p[not(node())] | p[s[not(node())]]"/>

          Comment


          • #6
            Juhuuu

            jetzt geht es endlich.
            vielen dank.
            das war ja ein geniestreich

            Comment

            Working...
            X