set_content funktion

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

  • set_content funktion

    hallo,

    ich habe ein großes problem.
    ich habe eine php-datei die daten aus einem xml-baum ausliest, sie bearbeitet und dann mit set_content ändert. mein problem ist jetzt, daß der neue inhalt an den alten angehängt wird.
    weiß jemand von euch, wie ich das verhinder kann, bzw. den alten inhalt lösche?

    vielen dank für eure hilfe!
    nadja

  • #2
    Re: set_content funktion

    Original geschrieben von nadjak
    hallo,

    ich habe ein großes problem.
    [....]
    weiß jemand von euch, wie ich das verhinder kann, bzw. den alten inhalt lösche?
    Hi nadjak,

    willkommen in der Community!

    Bitte in diesen Subforum immer zuerst Parser, API oder Bibiotehek angeben, damit man Dir die passende Lösung geben kann.

    Das ist nur ein kleines Problem.
    Unter der Massgabe, dass Du DOMXML benutzt:
    PHP-Code:
    // Nutze statt 
    $node->set_content("content");
    // besser 
    $node->replace_content("content"); 
    cu

    Blaster
    Yuppi, endlich Elite ...

    Kommentar


    • #3
      hallo blaster

      ... ich habe selbiges problem wie nadjak und mich erstmal ziemlich gefreut deine lösung gefunden zu haben - allerdings liefert sie nur ein call to undefiened function zurück ....
      hättest du ne idee woran das liegen könnte?
      DMXMLAPI ist 20020814 libxml ist 20430

      auf php.net ist diese function leider nicht zu finden

      Kommentar


      • #4
        Hi superzorro,

        ebenfalls Willkommen in der Community.

        Wenig Zeit i.M.

        deshalb kurz:
        welche PHP Version?
        Php extension XSLT oder Sablotron?
        wie ist dein Kontenobjekt definiert? (Codezeile)
        set_content funzt, aber replace_content nicht ?!? - strange...
        poste code
        sonst:
        http://php3.de/manual/en/function.do...et-content.php
        http://de3.php.net/manual/en/functio...place-node.php

        cu

        Blaster
        Zuletzt geändert von Blaster; 09.10.2003, 02:46.
        Yuppi, endlich Elite ...

        Kommentar


        • #5
          Hallo

          erstmal danke für den wilkommensgruss :-)

          Php version ist 4.3.2-RC1

          Php extension XSLT oder Sablotron?
          verstehe ich nicht ganz (inability) ich habe sowohl sablotron
          als auch die lib fürs dom ....

          der ablauf meiner scripte ist folgender:
          ich lese zunächst mit expat alle xml-tags in ein arry übergebe dieses array
          meiner domxml function die dann den content wieder in ein array bzw eine DB schreibt.
          ich scheitere daran das ich beim auslesen des contents ihn gleich durch einen funktionsaufruf ersetzen möchte.

          die dom function schaut so aus:
          function get_content($tag){

          $dokument = domxml_open_file("c:/wampp1/htdocs/deluxe/DAT.xml");
          $meine_elemente = $dokument->get_elements_by_tagname($tag);
          foreach ($meine_elemente as $knoten)
          {
          $flag1=$knoten->children();
          $flag = $flag1[0]->node_type();
          $c_flag=$flag1[0]->get_content();
          $c_flag=trim($c_flag);

          if($flag==XML_TEXT_NODE){
          if($c_flag!=""){
          $elm_text[]= $knoten->get_content();//funzt
          //$knoten->set_content("dummytext");//fügt den text an lässt den alten
          aber drin
          //$knoten->replace_content("dummytext");//gibt call to undefined function

          }
          }
          }
          if($elm_text){

          return $elm_text;
          }else{

          return false;
          }
          }

          for($i=0;$i<$length;$i++){
          $flag3=get_content($element_array[$i]);
          if($flag3){

          $content[]=get_content($element_array[$i]);}


          ja und da steh ich dann aufm schlauch ....


          P.S. : gruss nach essen - komme aus dortmund also gleich um die ecke :-)

          Kommentar


          • #6
            nachtrag

            ups - das ganze ist natürlich noch ne draftversion
            der ganze $dokument->dump_file( part usw... fehlt in dem beispiel ....

            da bin ich auch noch unsicher wie ich da das output-file mit der schleife kombiniere, aber solange ich das replace problem nichtgelöst habe brauch ich mir darüber den kopf ja auch noch nicht zu zerbrechen.

            bin auch nicht so der php-crack insofern fordern mich die domxml funktionen da auch ganz schön :-)

            Kommentar


            • #7
              Re: Hallo

              Original geschrieben von superzorro
              ...
              $elm_text[]= $knoten->get_content();//funzt
              //$knoten->set_content("dummytext");//fügt den text an lässt den alten
              aber drin
              //$knoten->replace_content("dummytext");//gibt call to undefined function
              ...
              ja und da steh ich dann aufm schlauch ....
              ...
              P.S. : gruss nach essen - komme aus dortmund also gleich um die ecke :-)
              Ich freu mich, dass die Leute mittlerweile so gut sind, dass sie mir die Scheiße, die ich damals gepost habe, heute um die Ohren klatschen!

              Du hast recht! Es gibt kein replace_content, sondern nur ein replace_node.
              In meinen Skripten habe ich auch nur replace_node verwendet.
              Ein Beispiel:
              PHP-Code:
                  // Bei oben dargestellte Bug erzwingt eine Neukonstruktion.
                  // Hierbei werden keine Kindknoten berücksichtigt.
                            
              if (PEAR::isError($this->check_attribute_namespaces($substfile))) {
                                 return 
              $this->_raiseSoapFault("Check 4 att ns fails.\nSubst-File:\n$substfile");
                           }
                           if(
              $this->check_attribute_namespaces($substfile)){        
                                
              $elem $DomDoc->create_element($root_subst->tagname);
                               
              $attribute $elem->set_attribute("$this->ns_att:$this->att_name"$root_subst->get_attribute($this->att_name));
                               
              $content $root_subst->get_content();
                              
              $elem->set_content($content);
                           }else{
                               
              $elem $root_subst;
                           }
                      }
                  
              // Substitution
                      
              $node->replace_node($elem); 
              Bitte vielmals um Entschuldigung! *geisel*

              Grüsse aus dem "Silicon-Ruhr"!
              Blaster
              Zuletzt geändert von Blaster; 10.10.2003, 22:06.
              Yuppi, endlich Elite ...

              Kommentar


              • #8
                *grins*

                .. das ist doch mal ne nette antwort ...
                mit replace_node funzt es dann auch

                allerdings laufe ich gleich auf das nächste problem. der content den ich einfügen will ist ein funktionsaufruf - und set_content replaced die php-klammern durch die zugehörigen entities....

                benutze ich nun create_processing_instruction für den content ist er ein object und set_content funzt nicht mehr weil die funktion einen string erwartet...

                wenn ich den neuen node gleich mit create_processing_instruction fehlt das xml-tag drumherum....

                alles was mir dazu einfällt ist das entstandenne file nochmal einzulesen und mit eregi die entities wieder zu ersetzen - aber vielleicht gibts da ja eine bessere möglichkeit?

                so genug löcher in den bauch gefragt :-) wünsche nen guten wochenanfang ....

                Kommentar


                • #9
                  Häää?

                  Ich übertrage auch PHP-Scripte über WSDL/SOAP beim sog. dead end building, die in XML Tags embedded sind. Aber die encode ich vor der Übertragung in base64 (DIME), weil schon ein
                  if($a<="bla")...
                  ein Parsererror hervorruft.
                  Da nutzt dir ein <PHP>blabla ... </PHP> gar nichts.
                  Und derart mit PI XML parsbar zu machen ist viel zu viel Akt.
                  Ich setze noch meist einen zusätzlichen Kindknoten, der den Webservice-Methode beschreibt.

                  Weiß ja nicht, was Du so vor hast?!

                  cu

                  Blaster
                  Yuppi, endlich Elite ...

                  Kommentar


                  • #10
                    hallo

                    ok - das mit der processing_instruction war meine doofheit :-) das läuft wohl jetzt ...
                    was ich eigendlich vorhabe ist eine administration für ein kleines cms - die scripte werden nicht übertragen und das file das per dump_file entsteht ist auch eigendlich ein php file. die strucktur des xml's bleibt erhalten - zwischen den tags steht aber nicht mehr der eigendliche content sondern ein php funktionsaufruf der sich den passenden text aus einer datenbank holt...
                    das cms läuft auch schon prima -- die xmls (via script )in die db zu bekommen noch nicht so ganz ....

                    die function liesst ein xml ein - dort wo ein node text enthählt kommt dieser in ein array und später in ne db - gleichzeitig wird der node replaced durch den gleichnamigen node mit funktionsaufruf ....

                    da ich dabei jedesmal auf ein neues problem laufe - hier das aktuelle:
                    die indizes passen leider nicht übereinander....

                    jedesmal wenn ich der dom funktion einen xmltag übergebe der im document mehrmals vorkommt bekommen diese auch immer den gleichen index - während das array mit dem content in einer schleife einfach hochgezählt wird ....

                    hier mal der code:
                    function get_content($tag){

                    $path="c:/wampp1/htdocs/deluxe/writer/progress/";
                    $file="DAT.xml";
                    ###########################################
                    $dokument = domxml_open_file($path.$file);
                    ###########################################
                    $y= count($tag);
                    $z=0;
                    for($i=0;$i<$y;$i++){


                    //domxml_open_mem
                    $meine_elemente = $dokument->get_elements_by_tagname($tag[$i]);


                    //print_r($meine_elemente);
                    foreach ($meine_elemente as $knoten)
                    {
                    $flag1=$knoten->children();
                    $flag = $flag1[0]->node_type();
                    $c_flag=$flag1[0]->get_content();
                    $c_flag=trim($c_flag);

                    if($flag==XML_TEXT_NODE){
                    if($c_flag!=""){
                    $z++;
                    $new_element=$dokument->create_element("$tag[$i]");
                    $elm_text[$z]= $knoten->get_content();
                    $knoten=$knoten->replace_node($new_element);
                    $child=$dokument->create_processing_instruction("php","display($z,\$cc,\$projects,\$datei,\$secure,1)");
                    $pross=$new_element->append_child($child);
                    }
                    }
                    }
                    }//end for

                    $dokument->dump_file("c:/wampp1/htdocs/deluxe/writer/progress/outputtest.xml", false, true);
                    //Returns:
                    if($elm_text){

                    return $elm_text;
                    }else{

                    return false;
                    }

                    }//function


                    $foo=get_content($element_array);

                    print_r($foo);


                    das $element_array wird vorher durch ein anderes script gebildet und enthält alle xmltag-namen desselben xml-files ....

                    wenn die sachen rundlaufen wird das file natürlich übergeben und steht nichtmehr hartgecoded in der function ....


                    das xml sieht dann ungefähr so aus:
                    <?xml version="1.0" encoding="UTF-8"?>
                    <signupPage>
                    <general>
                    <homeURL><?php display(1,$cc,$projects,$datei,$secure,1)?></homeURL>
                    </general>
                    <header>
                    <title><?php display(2,$cc,$projects,$datei,$secure,1)?></title>
                    <globaltabs>
                    <globaltab1>
                    <link><?php display(4,$cc,$projects,$datei,$secure,1)?></link>
                    <text><?php display(13,$cc,$projects,$datei,$secure,1)?></text>
                    </globaltab1> .........




                    so - ich hoffe ich geh dir nicht auf die nerven mit meinem shietkram :-)

                    Kommentar


                    • #11
                      hmmmm

                      es wäre cool wenn es ne function gäbe mit der man die geschwisterknoten zählen könnte ---- also sowas wie has_sibling statt has_child_notes()

                      Kommentar


                      • #12
                        Und warum ergänzt die xml Tags mit Attributen wie
                        <globaltab id=1">
                        oder
                        <globaltab idref="1">?!?

                        Wieso Dumpflie?! Ist doch Webservice undi damit nteroperabel?!
                        Yuppi, endlich Elite ...

                        Kommentar


                        • #13
                          ähh?

                          was hat das denn mit webservice zutun? ich hab doch keine 2 applickationen die miteinander kommunizieren sollen....

                          Kommentar

                          Lädt...
                          X