Announcement

Collapse
No announcement yet.

"<" bzw. ">" erhalten, wenn String als Nodetext eingefügt wird (DOMXML und PHP)

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

  • "<" bzw. ">" erhalten, wenn String als Nodetext eingefügt wird (DOMXML und PHP)

    Hallo Forum,

    ich habe da ein Problem mit HTMLENTITIES und schon eine ganze Weile gegoogelt. Meine Erfolge mit dem Befehl HTML_ENTITIES_DECODE waren auch eher spärlich. Vielleicht könnt Ihr mir ja helfen.

    Ich habe folgendes Tag in einer XML-Struktur:
    Code:
    <Content></Content>
    Dort paste ich ein Array rein, dass ich per implode wie folgt zusammenfallen lasse:
    Code:
    $contentElements = $storyXML->getElementsByTagName('Content');
    $contentElement = $contentElements->item(0);
    $newElement = $storyXML->createTextNode(implode('</Content><BR><Content>', $paste));
    $contentElement->appendChild($newElement);
    es kommt leider immer folgendes heraus:
    Code:
    <Content>TV-Center&lt;/Content&gt;&lt;BR&gt;&lt;Content&gt;......</Content>
    wobei aber das hier erwünscht ist:
    Code:
    <Content>TV-Center</Content><BR><Content>......</Content>
    Hat jemand eine Idee wie "<" und ">" erhalten kann? Danke für Eure Hilfe.

    Gruss
    Dom

  • #2
    Passt doch. Zeichen wie <, > die im XML besondere Bedeutung haben müssen als Text-Node escaped werden.
    In der Datei steht dan &lt; und entsprechende. Das sollte dich nicht stören da ja dein XML-Parser beim Auslesen das gegenstück der Textcodierung wieder anwendet.

    oder willst du in deiner XML-Struktur eine Unterstruktur erstellen?

    Comment


    • #3
      Ja genau, ich will eine Unterstruktur erstellen. Danke für die schnelle Antwort.

      Gruss

      Comment


      • #4
        </Content><BR><Content> muss ein neues Child werden
        Christian

        Comment


        • #5
          Hallo,
          Originally posted by dom77 View Post
          Ja genau, ich will eine Unterstruktur erstellen.
          du kannst aber keinen DOM-Baum manipulieren, indem du per TextNode einen XML-String einfügst. Dazu müsste die XML-Klasse über eine Parserfunktion (ähnlich innerHTML bei JavaScript) verfügen. Aber in der von dir verwendeten Art und Weise wird selbst das nicht funktionieren, da das eingefügte XML in sich gültig sein müsste, damit es geparst werden kann. '</Content><BR><Content>' ist jedoch kein gültiges XML!
          Eine strikte DOM-orientierte Vorgehensweise würde in etwa so aussehen:
          - Knoten des Content-Elements holen
          - Textknoten innerhalb des Content-Elements holen
          - Text aus dem Textknoten nach Wunsch splitten
          - Textknoten aus dem Content-Element löschen
          - Neuen Textknoten mit dem ersten Textteil erstellen und in das Content-Element einfügen
          - BR-Knoten hinter das Content-Element einfügen
          - Neues Content-Element erstellen
          - Neuen Textknoten mit dem zweiten Textteil erstellen und in das neue Content-Element einfügen
          - Neues Content-Element hinter den BR-Knoten einfügen

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Hallo Falk,

            ich habe das Ganze nun folgendermaßen gelöst, danke für Deine Tipps:

            Code:
            // erstelle ein Array der Story Inhalte
                        $pastes = array('ID: ' . $itemsNamesWithinSpread[$i],
                            'VKText: ' . $itemsVkTextsWithinSpread[$i],
                            'Preis: ' . $itemsVkPreiseWithinSpread[$i],
                            'Streichpreis: ' . $itemsStreichpreiseWithinSpread[$i],
                            'PreisBemerkung: ' . $itemsPreisBemerkungenWithinSpread[$i],
                            'Breite (cm): ' . $itemsArtWidthsWithinSpread[$i],
                            'Höhe (cm): ' . $itemsArtHeightsWithinSpread[$i],
                            'Tiefe (cm): ' . $itemsArtDepthsWithinSpread[$i]);
            
                        // Story Inhalte werden in den Content eingefügt
                        foreach ($pastes as $j => $paste) {
                            $marker = $storyXML->getElementsByTagName('CharacterStyleRange')->item(0);
                            $marker->appendChild(new DOMElement('Content'));
                            $marker->appendChild(new DOMElement('Br'));
                            $marker = $storyXML->getElementsByTagName('Content')->item($j);
                            $marker->appendChild($storyXML->createTextNode($paste));
                        }
            Gruss
            Dom

            Comment

            Working...
            X