ist preg_replace die richtige Lösung?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ist preg_replace die richtige Lösung?

    Liebe XML-Spezialisten

    Hoffentlich habe ich mit diesem Anliegen mehr Erfolg bei euch als mit meinen letzten Fragen...

    Also, ich erhalte aus einem InDesign-XML-Export ein XML-File (das kann z.B. ein Zeitungs-Artikel sein). Dieses File will ich mit Hilfe von XSL in ein HTML umwandeln, soweit bin ich und es sieht sogar gut aus.
    In diesem Artikel kann es vorkommen, dass URL's aufgeführt sind, so in diesem Stil: "...für weitere Informationen besuchen Sie auch die Homepage der Firma, www.firma.ch"
    Damit diese URL aber im HTML-File auch anklickbar ist, müsste ich ja die URL in einen Link umwandeln.
    Gibt es eine Möglichkeit, per XSL z.B. nach www.*.* zu suchen und diesen in ein ahref einzupacken?

    Vielen Dank für eure Hilfe

  • #2
    tut mir leid hab heut erst mit xml/xsl/DTD angefangen bekomm eigentlich noch nichts hin

    wär doch alles wie PHP
    Lurchi ! Lurchi ! Lurchi !

    Kommentar


    • #3
      vielleicht hilft dir ja das weiter


      4.4 Handling Trackable Urls
      4.4.1 Handling Simple Links
      Example: The template contains an element ’link’, in which the user can enter web addresses.
      Users may enter simple http addresses, or use the Inxmail url tags. The XSL has to make sure
      that it can handle both correctly.
      If the mailing editor enters a link with an Inxmail url tag, or the link contains href (meaning the
      user entered a valid HTML anchor tag), output the element value without escaping. Otherwise,
      create the HTML anchor tag using the element value with escaping:
      <xsl:choose>
      <xsl:when test="contains( link, ’[%url’ )">
      <xsl:value−of disable−output−escaping = "yes" select="link"/>
      </xsl:when>
      <xsltherwise>
      <xsl:choose>
      <xsl:when test="contains( link, ’href=’ )">
      <xsl:value−of disable−output−escaping = "yes" select="link"/>
      </xsl:when>
      <xsltherwise>
      <a><xsl:attribute name="href">
      <xsl:value−of select="link"/>
      </xsl:attribute>
      <xsl:value−of select="link"/></a>
      </xsltherwise>
      </xsl:choose>
      </xsltherwise>
      </xsl:choose>
      4.4.2 Handling Links With Images
      If you want to create trackable links with images, you first have to check if the link is trackable.
      If so, parse the link description and create a new link which uses the given image:
      <xsl:choose>
      <xsl:when test="contains( link, ’[%url’ )">
      <xsl:call−template name="createtracklink">
      <xsl:with−param name="url" select="link"/>
      <xsl:with−param name="image" select="image"/>
      </xsl:call−template>
      </xsl:when>
      <xsltherwise>
      <a href="{link}"><img border="0" src={image}/>></a>
      </xsltherwise>
      </xsl:choose>
      <xsl:template name="createtracklink">
      <xslaram name="url"/>
      <xslaram name="image"/>
      <xsl:value−of select="substring-before($url,’]’)"/><xsl:text>;</xsl:text>
      <img border="0" src="$image"/>
      Lurchi ! Lurchi ! Lurchi !

      Kommentar


      • #4
        ist preg_replace die richtige Lösung?

        Liebe PHP-Spezialisten

        Mal vorab.. ich hab das gleiche Problem schon in der XML-Abteilung gestellt um zu wissen, ob es per xsl machbar wäre. Denke aber dass es auch über PHP möglich sein müsste.

        Folgendes: von einem InDesign-Dokument (in diesem Fall ein Zeitungsartikel) wird ein XML exportiert. Dieses XML rufe ich mit PHP auf und wandle es on-the-fly mit XSL um.

        Dabei wird der ganze Inhalt in den String $html3 geschrieben. Jetzt kann es vorkommen, dass in diesem Artikel eine Internet-Adresse vorkommt, also z.B. "...mehr erfahren Sie auch auf der Internet-Seite des Herstellers: www.hersteller.ch".
        Bei der Umwandlung von XML zu HTML passiert nun natürlich mit dieser URL gar nichts, sie erscheint also auch im HTML als Text. Ich würde jetzt aber gerne jeweils den ganzen String vor der Anzeige durchsuchen lassen, nach Internet-Adressen suchen und diese in eine ahref packen.

        Wäre da preg_replace ein richtiger Ansatz? Könnte ich damit z.B. nach www.*.* suchen?

        Vielen Dank für eure Hilfe.

        ach ja.. da ist noch der PHP-Code, der das XML-File mit Hilfe von XSL in HTML umwandelt.

        PHP-Code:
        <?php

        $xml 
        = new DomDocument();
        $xml->load("xmlneu/artikel.xml");
        if(!
        $xml) {
        exit (
        "Fehler beim Parsen des Artikels");
        }

        $xslt = new DomDocument();
        $xslt->load("xsl/anzeiger_template.xsl");
        //$xslt->load("xsl/test2.xsl");
        if(!$xslt) {
        print (
        "Fehler bei XSLT");
        exit();
        }

        $xsltproc = new XsltProcessor();
        if(!
        $xsltproc) {
        exit (
        "Fehler beim Erstellen des XSLT-Prozessors");
        }

        $xsltproc -> importStylesheet($xslt);

        $html3 .= ($xsltproc ->transformToXml($xml));


        print 
        $html3;

        ?>

        Kommentar


        • #5
          Re: ist preg_replace die richtige Lösung?

          Original geschrieben von Fanello
          Wäre da preg_replace ein richtiger Ansatz? Könnte ich damit z.B. nach www.*.* suchen?
          Salopp gesagt !ja!

          falls dir anwendungsbeispiele fehlen und wie du das umsetzten kannst

          http://regexp-evaluator.de

          die seite hat mir persönlich sehr weiter geholfen.
          Bitte Beachten.
          Foren-Regeln
          Danke

          Kommentar


          • #6
            Kommt sehr darauf an wie die Links im Text stehen. Kommt vorher ein http:// ? Weil nicht jeder Link mit www beginnen muss wird es sonst schwierig den Anfang einer Linkadresse mit Sicherheit festzustellen. Gesetzt den Fall, dass jeder Link mit www beginnen würde, könntest du folgendes probieren
            PHP-Code:
            $reg '/(www\\.[^\\s]*)/is';
            $str preg_replace($reg,'<a href="\\1">\\1</a>',$deinString); 
            Gruss

            tobi

            p.s. kannst hier sehr gut RegExp testen
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              wow.. das mit dem regexp-Evaluator ist fantastisch...

              ich habs hingekriegt.. vielen Dank!!!

              mein Code für die Nachwelt...

              PHP-Code:
              <?php

              $xml 
              = new DomDocument();
              $xml->load("xml/REX_VALUE[1]");
              if(!
              $xml) {
              exit (
              "Fehler beim Parsen des Artikels");
              }

              $xslt = new DomDocument();
              $xslt->load("xsl/xml2php.xsl");
              if(!
              $xslt) {
              print (
              "Fehler bei XSLT");
              exit();
              }

              $xsltproc = new XsltProcessor();
              if(!
              $xsltproc) {
              exit (
              "Fehler beim Erstellen des XSLT-Prozessors");
              }

              $xsltproc -> importStylesheet($xslt);

              $html3 .= ($xsltproc ->transformToXml($xml));

                
              //
                // Text, der durchsucht werden soll
                //
                
              $subject $html3;
                
              //
                // Der Reguläre Ausdruck
                //
                
              $pattern '=(www\.[^\s]*)=is';
                
              //
                // Ersatzstring
                //
                
              $replace '<a target="_blank" href="http://\1">\1</a>';
                
              //
                // RegExp auswerten, Ersetzung durchführen
                //
                
              $result preg_replace($pattern$replace$subject);
                
              //
                // Ergebnis ausgeben
                //
              print $result;


              ?>
              Zuletzt geändert von Fanello; 19.01.2007, 14:35.

              Kommentar


              • #8
                natürlich musste jetzt doch noch ein neues Problem auftauchen...

                also, die Transformation klappt einwandfrei, wenn sich die www-Adresse irgendwo im Text befindet. Wenn aber z.B. der Titel eines Abschnitts nur aus einer URL besteht, dann gibts Probleme...

                Also würde es z.B. beim Titel

                PHP-Code:
                <h5>[url]www.adresse.ch[/url]</h5
                folgenden Link machen:

                PHP-Code:
                http://www.adresse.ch</h5> 
                Klar, die Information ist ja, dass er alles bis zum ersten Leerzeichen nehmen soll.. könnte man jetzt auch noch eine weitere Bedingung einbauen?

                habs gleich selber rausgefunden...
                muss den $pattern-Teil mit diesem Ersetzen.. ich hab einfach noch ne '<' hinzugefügt

                PHP-Code:
                $pattern '=(www\.[^|<\s]*)=is'
                Zuletzt geändert von Fanello; 19.01.2007, 16:05.

                Kommentar

                Lädt...
                X