simplexml

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

  • simplexml

    Hallo zusammen.

    Kennt sich jemand mit simplexml aus?
    Dies gibt es ab PHP5, womit ich auch arbeite.
    Damit kann ich ein XML Dokument in ein simplexmlobject transferieren.

    Mein Problem ist folgendes:
    Ich möchte eine XML dynmisch auswerten und dessen Knotenpunkte ab einem bestimmten Knoten mit dessen Wert in ein Array packen. Die Anzahl und Namen der Knotenpunkte kenn ich nicht.

    XML:
    Code:
    <root>
      <?xml version="1.0" encoding="utf-8"?>
    <root>
        <formFields>
            <field>
                <name>
                    vorname
                </name>
                <errorMessage>
                    Value Vorname is Wrong!
                </errorMessage>
                <validation>
                    <length_min>
                        2
                    </length_min>
                    <length_max>
                        30
                    </length_max>
                    <alpha/>
                    <number/>
                    <test1/>
                </validation>
            </field>
            <field>
                <name>
                    nachname
                </name>
                <errorMessage>
                    Value Nachname is Wrong!
                </errorMessage>
                <validation>
                    <length_min>
                        2
                    </length_min>
                    <length_max>
                        40
                    </length_max>
                    <alpha/>
                    <number/>
                    <test2/>
                </validation>
            </field>
            <field>
                <name>
                    Ort
                </name>
                <errorMessage>
                    Value Ort is Wrong!
                </errorMessage>
                <validation>
                    <length_min>
                        2
                    </length_min>
                    <length_max>
                        50
                    </length_max>
                    <alpha/>
                    <number/>
                    <test3/>
                </validation>
            </field>
        </formFields>
    </root>
    PHP:
    PHP-Code:
        $xmlPath =  dirname(__FILE__)."\\test.xml";
        
    $objXML = @simplexml_load_file($xmlPath);  //@ = Hide PHP Warnings for this function
          
        
    $formFields[] = array();
        
    $validateClasses[] = array();
        
    $i 0//count var
        
    $j 0//count var, too
        
        
        
    if(is_object($objXML)) {
          
    //$objXML is an object!
          
          //all childs from the formFields Node
            
    foreach($objXML->formFields->field as $field) { 
            
    //echo "<br><br><b>FormFeld Name:</b> " . $field->name;
            
    $formFields[$i][name] = $field->name;
              
    //echo "<br><b>FormFeld errorMessage:</b> " . $field->errorMessage; 
            
    $formFields[$i][errorMessage] = $field->errorMessage
            
            
    //get all validation child nodes -> classes
            
    foreach($field->validation->children() as $field2) {
              
    //echo "<br><b>Name des Validation-Kind-Knotens:</b> " . $field2->getName();
              
    $validateClasses[$j][$field2->getName()] = $field2;   
              
    $j++;
            }
    $j=0;
            
            
    $formFields[$i][validation] = $validateClasses;
            
    $i++;    
            echo 
    "<br><br>";
          }
        }else {
          echo 
    "<br>XML konnte nicht geladen werden!";
        }
    echo 
    "<pre>"print_R($formFields); echo "</pre>"
    Wenn man sich das Ergebnis im Browser anschaut, dann sieht man eine Struktur des Arrays. Dies schaut folgendermaßen aus:

    Code:
    Array
    (
        [0] => Array
            (
                [name] => SimpleXMLElement Object
                    (
                        [0] => 
                    vorname
                
                    )
    
                [errorMessage] => SimpleXMLElement Object
                    (
                        [0] => 
                    Value Vorname is Wrong!
                
                    )
    
                [validation] => Array
                    (
                        [0] => Array
                            (
                                [length_min] => SimpleXMLElement Object
                                    (
                                        [0] => 
                        2
                    
                                    )
    
                            )
    
                        [1] => Array
                            (
                                [length_max] => SimpleXMLElement Object
                                    (
                                        [0] => 
                        30
                    
                                    )
    
                            )
    
                        [2] => Array
                            (
                                [alpha] => SimpleXMLElement Object
                                    (
                                    )
    
                            )
    
                        [3] => Array
                            (
                                [number] => SimpleXMLElement Object
                                    (
                                    )
    
                            )
    
                        [4] => Array
                            (
                                [test1] => SimpleXMLElement Object
                                    (
                                    )
    
                            )
    
                    )
    
            )
    
        [1] => Array
            (
                [name] => SimpleXMLElement Object
                    (
                        [0] => 
                    nachname
                
                    )
    
                [errorMessage] => SimpleXMLElement Object
                    (
                        [0] => 
                    Value Nachname is Wrong!
                
                    )
    
                [validation] => Array
                    (
                        [0] => Array
                            (
                                [length_min] => SimpleXMLElement Object
                                    (
                                        [0] => 
                        2
                    
                                    )
    
                            )
    
                        [1] => Array
                            (
                                [length_max] => SimpleXMLElement Object
                                    (
                                        [0] => 
                        40
                    
                                    )
    
                            )
    
                        [2] => Array
                            (
                                [alpha] => SimpleXMLElement Object
                                    (
                                    )
    
                            )
    
                        [3] => Array
                            (
                                [number] => SimpleXMLElement Object
                                    (
                                    )
    
                            )
    
                        [4] => Array
                            (
                                [test1] => SimpleXMLElement Object
                                    (
                                    )
    
                                [test2] => SimpleXMLElement Object
                                    (
                                    )
    
                            )
    
                    )
    
            )
    
        [2] => Array
            (
                [name] => SimpleXMLElement Object
                    (
                        [0] => 
                    Ort
                
                    )
    
                [errorMessage] => SimpleXMLElement Object
                    (
                        [0] => 
                    Value Ort is Wrong!
                
                    )
    
                [validation] => Array
                    (
                        [0] => Array
                            (
                                [length_min] => SimpleXMLElement Object
                                    (
                                        [0] => 
                        2
                    
                                    )
    
                            )
    
                        [1] => Array
                            (
                                [length_max] => SimpleXMLElement Object
                                    (
                                        [0] => 
                        50
                    
                                    )
    
                            )
    
                        [2] => Array
                            (
                                [alpha] => SimpleXMLElement Object
                                    (
                                    )
    
                            )
    
                        [3] => Array
                            (
                                [number] => SimpleXMLElement Object
                                    (
                                    )
    
                            )
    
                        [4] => Array
                            (
                                [test1] => SimpleXMLElement Object
                                    (
                                    )
    
                                [test2] => SimpleXMLElement Object
                                    (
                                    )
    
                                [test3] => SimpleXMLElement Object
                                    (
                                    )
    
                            )
    
                    )
    
            )
    
    )
    Zuletzt geändert von jens2; 28.03.2008, 12:50.

  • #2
    Nicht umsonst steht da, dass es sich teilweise um Arrays und teilweise um Objekte handelt.
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      fortsetzung zu oben

      Frage 1:
      Warum macht er zwischen name und wert ein Ebene?
      "[name] => SimpleXMLElement Object
      (
      [0] =>
      vorname" ???
      Wenn ich "$formFields[0][name]" ausgebe, bekomm ich den Namen.
      Wenn ich "$formFields[0][name][0]" ausgebe, bekomm ich den Namen auch.
      Warum gibt er nicht "[name] => vorname" aus?

      Frage 2:
      $formFields[0][validation] ist ein Array, stimmt auch.
      $formFields[0][validation][0] sollte nun der 1. Knoten in dem Knoten Validation sein. Ist aber auch ein Array, selbe Problem wie Frage 1.
      $formFields[0][validation][0][0] sollte dann aber laut debug "length_min" sein, aber er gibt nix aus.

      Ich hoffe ihr versteht mein Problem, den Langsam blicke ich net mehr druch. Vielleicht habe in PHP und Arrays auch was falsch verstanden. Ich wäre für jeden Tipp dankbar.

      Gruß Jens2

      Kommentar


      • #4
        Hallo unset.

        Danke für deine Antwort. Gibt es vielleicht eine andere Möglichkeit
        eine sauberes Array zu erzeugen? Denn es soll ja später dynmisch in jedes Feld gehen und dessen Infos extrahieren.

        Gruß Jens2

        Kommentar


        • #5
          Wer? Das Array? Das kann es alleine schon mal gar nicht. Ich weiß auch nicht, wo das Problem ist zu prüfen, ob es sich um ein Array oder ein Objekt handelt und das ganze entsprechend abzuarbeiten.
          [FONT="Helvetica"]twitter.com/unset[/FONT]

          Shitstorm Podcast – Wöchentliches Auskotzen

          Kommentar


          • #6
            Das Problem ist, das ich nicht die werte des validation Arrays ausgeben kann.

            $formFields[0] = Nr des feldes "field"
            $formFields[0][name] ODER $formFields[0][0] soll den namen ausgeben->stimmt;
            $formFields[0][validation][0] soll mir "length_min" ausgeben, und da scheiter ich dran.

            Kommentar


            • #7
              @Jens2
              Bitte noch die Regeln bezüglich Formatierung von Quellcode nachlesen und umsetzen (zumindest für den PHP-Teil deines Codes).
              Danke und Gruss

              tobi
              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


              • #8
                Danke für Eure Hilfe.
                Habe das Problem gelöst.
                Danke nochmal an Unset.

                Gruß Jens2

                Kommentar


                • #9
                  Trag doch bitte für die Nachwelt noch deine Lösung bzw. Erkenntnis nach

                  Kommentar


                  • #10
                    Ich habe bei der Wertzuweisung einen leeren String mitgegeben
                    also $test = "".$array[index][bla][blub];
                    Dadurch war das simplexml_object weg und keine leerzeilen mehr da.

                    Kommentar

                    Lädt...
                    X