TobiasBuschi: xhtml konvertieren

hallo allerseits

Ich bin auf der Suche nach der besten Methode um x(ht)ml zu konvertieren / transformieren ein beispiel:

ich will eine Funktion "xhtml_konvert" die zum Beispiel bei einem image-tag Höhe und Breite mit php-funktionen ermittelt, und ergänzt falls sie nicht angegeben wurde

$input =     '<html><head></head><body>
              <img src="irgendeinbild.jpg">
              <body>';

$output = xhtml_konvert($input);

---------
output:
 '<html><head></head><body>
  <img src="irgendeinbild.jpg" width="100px" height="69px">
  <body>';

Ich habe das PEAR-Paket xml_transform gesehen, aber will es nicht benutzen da die PHP version 5.1 nicht unterstützt wird und weil ich nicht weiss wie gut und sauber sie wirklich ist.

löst man sowas mit xsl?
Am liebsten wäre mir die performanteste, einfachste, standartisierteste und sauberste Lösung :)

  1. Hi,

    Ich bin auf der Suche nach der besten Methode um x(ht)ml zu konvertieren / transformieren ein beispiel:

    Moment: Was willst Du in was konvertieren?

    $input =     '<html><head></head><body>
                  <img src="irgendeinbild.jpg">
                  <body>';

    Das ist weder gültiges HTML noch XHTML,

    '<html><head></head><body>
      <img src="irgendeinbild.jpg" width="100px" height="69px">
      <body>';

    und das auch nicht. Zusätzlich haben die neu hinzu gekommenen Attribute ungültige Werte. Sprich: Du hast die Lage verschlimmert. Warum möchtest Du das?

    Am liebsten wäre mir die performanteste, einfachste, standartisierteste und sauberste Lösung :)

    Du solltest vor allem das Problem spezifizieren, das zu lösen Du versuchst. Nebenbei schreibt man "Standard" mit nur einem "t"; das ändert sich nicht bei davon abgeleiteten Adjektiven.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah.

      Nebenbei schreibt man "Standard" mit nur einem "t"; das ändert sich nicht bei davon abgeleiteten Adjektiven.

      Und was, wenn er dies auf künstlerische Art und Weise gemeint hat?

      Einen schönen Sonntag noch.

      Gruß, Ashura

      --
      Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
      30 Days to becoming an Opera8 Lover -- Firefox tools for Opera built-ins
      Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
      MathML fetzt | Use OpenOffice.org
    2. Moment: Was willst Du in was konvertieren?

      eigentlich xml nach xml

      entschuldigung,

      $input =     '<html><head></head><body>
                    <img src="irgendeinbild.jpg" />
                    </body></html>';

      wird zu:

      '<html><head></head><body>
        <img src="irgendeinbild.jpg" width="100" height="69" />
        </body></html>';

      Du solltest vor allem das Problem spezifizieren, das zu lösen Du versuchst.

      in meinem Beispiel wird '<img src="irgendeinbild.jpg" />" zu "<img src="irgendeinbild.jpg" width="100" height="69" />" konvertiert.
      Ich will den ganzen Dom-Baum parsen und verschiedene tags die ich spezifiziert habe (auch eigene) mit php verändern.

      1. Hi,

        eigentlich xml nach xml

        ach so. Dafür wurde XSLT konzipiert. Wenn ich Dich richtig verstehe, willst Du das aber nicht wirklich.

        <img src="irgendeinbild.jpg" />

        <img> benötigt in jedem HTML-Standard, der mir gerade einfällt, ein alt-Attribut.

        Ich will den ganzen Dom-Baum parsen und verschiedene tags die ich spezifiziert habe (auch eigene) mit php verändern.

        Das Hinzufügen der intrinsischen Dimensionen von Bildern ist etwas, das ich nur bedingt per XSLT abdecken würde. Wenn es um individuelle Veränderungen geht, hängt meine Empfehlung davon ab, um welche Veränderungen welcher Fälle es sich handelt. In dem einen von Dir genannten Beispiel würde ich die <img>-Elemente direkt suchen, auswerten und verändert zurück schreiben.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Das Hinzufügen der intrinsischen Dimensionen von Bildern ist etwas, das ich nur bedingt per XSLT abdecken würde. Wenn es um individuelle Veränderungen geht, hängt meine Empfehlung davon ab, um welche Veränderungen welcher Fälle es sich handelt. In dem einen von Dir genannten Beispiel würde ich die <img>-Elemente direkt suchen, auswerten und verändert zurück schreiben.

          Das ist nur ein Beispiel, ich will ein ganzes Framework programmieren, das auf dieser Methode aufbaut.
          Na dann schau ich mir xslt mal genauer an, besten dank.

      2. Hallo,

        Ich will den ganzen Dom-Baum parsen und verschiedene tags die ich spezifiziert habe (auch eigene) mit php verändern.

        Dann tue dies: http://de3.php.net/manual/en/ref.dom.php
        Problem ist höchstens: Wenn du das Dokument mit loadHTMLFile() einliest und mit saveXML() speicherst, werden meines Wissens nicht die Kompatibilitätsrichtlinien für XHTML 1.0 beachtet (z.B. wird kein Leerzeichen zwischen letztem Attribut und /> eingefügt). Also solltest du vielleicht zusätzlich ein Programm verwenden, welches XHTML-Syntax verbessert (z.B. Tidy).

        Mathias

        1. Hallo molily.

          [...] werden meines Wissens nicht die Kompatibilitätsrichtlinien für XHTML 1.0 beachtet (z.B. wird kein Leerzeichen zwischen letztem Attribut und /> eingefügt). [...]

          Macht dies etwas aus?

          Ich kenne folgende drei Möglichkeiten, leere Element zu notieren.
          Soweit ich weiß sind alle drei korrekt:

          <foo></foo>  
          <foo/>  
          <foo />
          

          Oder?

          Einen schönen Montag noch.

          Gruß, Ashura

          --
          Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
          30 Days to becoming an Opera8 Lover -- Firefox tools for Opera built-ins
          Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
          MathML fetzt | Use OpenOffice.org
          1. Hallo,

            Ich kenne folgende drei Möglichkeiten, leere Element zu notieren.
            Soweit ich weiß sind alle drei korrekt:

            <foo></foo>

            <foo/>
            <foo />

              
            Korrektheit ist nicht der Punkt, sondern Kompatibilität mit HTML-Browsern. PHP DOM wird ein leeres Element eines XHTML-Dokuments als <element/> serialisieren, nach den Kompatibilitätsrichtlinien für XHTML sollte es aber <element /> oder (je nach Element) <element></element> heißen, sonst haben einige HTML-Parser damit Probleme. (XHTML als text/html ausliefern funktioniert halt nicht aus irgendwelchen notwendigen theoretischen Gründen, sondern geht lediglich von einer keinen Regeln folgenden Fehlertoleranz von HTML-Parsern aus).  
            <http://www.w3.org/TR/xhtml1/#C_2> und <http://www.w3.org/TR/xhtml1/#C_3>  
            <http://de.selfhtml.org/html/xhtml/unterschiede.htm#leere_elemente> und  
              
            Mathias
            
            1. Hallo molily.

              Korrektheit ist nicht der Punkt, sondern Kompatibilität mit HTML-Browsern.

              Gut, dann ist alles klar.
              Ich hatte den Eindruck, dass du etwas anderes meintest.

              Einen schönen Montag noch.

              Gruß, Ashura

              --
              Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
              30 Days to becoming an Opera8 Lover -- Firefox tools for Opera built-ins
              Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
              MathML fetzt | Use OpenOffice.org