Ankündigung

Einklappen
Keine Ankündigung bisher.

XML mit mehreren gleichen Feldnamen gezielt auslesen

Einklappen

Neue Werbung 2019

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

  • XML mit mehreren gleichen Feldnamen gezielt auslesen

    Hallo, ich muss ein XML auslesen welches doppelte Feldnamen enthält:

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <source>
    	<anlagen>
    		<anlage>
    			<text_modules>
    				<modul_header>
    					Werbung
    				</modul_header>
    				<modul_text>
    					Uninteressant
    				</modul_text>
    			</text_modules>
    			<text_modules>
    				<modul_header>
    					Aufgaben
    				</modul_header>
    				<modul_text>
    					Interessant
    				</modul_text>
    			</text_modules>
    			<text_modules>
    				<modul_header>
    					Daten
    				</modul_header>
    				<modul_text>
    					Interessant
    				</modul_text>
    			</text_modules>
    			<text_modules>
    				<modul_header>
    					Angebot
    				</modul_header>
    				<modul_text>
    					Interessant
    				</modul_text>
    			</text_modules>
    			<text_modules>
    				<modul_header>
    					Bewertung
    				</modul_header>
    				<modul_text>
    					Unteressant
    				</modul_text>
    			</text_modules>
    		</anlage>
    	<anlagen>
    <source>

    Mich interessiert der Inhalt der Felder, die ich mit "Interessant" markiert habe.

    Wie komme ich da dran?

    Versucht habe ich schon:
    Code:
    foreach ($anlage->text_modules->modul_text as $inhalt) {
    			echo $inhalt;
    }
    Oder $anlage->text_modules->modul_text[1]

    Ich komm bisher nicht drauf.

  • #2
    foreach ($anlage->text_modules as $inhalt) {
    echo $inhalt->modul_text;
    }
    Restaurant Bewertungsportal yumee.de

    Kommentar


    • #3
      kannste ja auch locker mit xslt machen:
      http://www.php.de/php-einsteiger/109...e-via-php.html

      Kommentar


      • #4
        Zitat von inkamina Beitrag anzeigen
        foreach ($anlage->text_modules as $inhalt) {
        echo $inhalt->modul_text;
        }
        Liefert leider keine Werte, obwohls gut aussieht. Hmm. Wenn ich

        Code:
        $anlage->text_modules->modul_text
        mache, bekomme ich den Inhalt des ersten Feldes.

        xslt, habe ich spontan nicht geblickt. Muss ich mir noch anschauen.

        Kommentar


        • #5
          Hm, wenn ich ein vardump von $anlage->text_modules mache, bekomme ich

          Code:
          object(SimpleXMLElement)#2400 (2) {
            ["modul_header"]=>
            object(SimpleXMLElement)#2440 (0) {
            }
            ["modul_text"]=>
            object(SimpleXMLElement)#2441 (0) {
            }
          }
          Wieso ist das leer?

          Und warum kann ich kein
          Code:
          echo $anlage->text_modules->modul_text;
          machen. Aber ein:
          Code:
          $test=$anlage->text_modules->modul_text;
          echo $test;
          Damit funktioniert es jetzt so:
          Code:
          foreach ($anlage->text_modules as $inhalt) {
          $array[]=$inhalt->modul_text;
          }
          echo $array[2];

          Kommentar


          • #6
            error_reporting mal aufgedreht? dein XML ist nicht wellformed..

            Code:
            ...
            <anlagen>
            <source>
            eher

            Code:
            </anlagen>
            </source>
            ??

            Wenn ich das zum Test mal korr, dann kommt bei print_r() das raus:

            Code:
            SimpleXMLElement Object
            (
                [anlagen] => SimpleXMLElement Object
                    (
                        [anlage] => SimpleXMLElement Object
                            (
                                [text_modules] => Array
                                    (
                                        [0] => SimpleXMLElement Object
                                            (
                                                [modul_header] => 
            					Werbung
            				
                                                [modul_text] => 
            					Uninteressant
            				
                                            )
            
                                        [1] => SimpleXMLElement Object
                                            (
                                                [modul_header] => 
            					Aufgaben
            				
                                                [modul_text] => 
            					Interessant
            				
                                            )
            
                                        [2] => SimpleXMLElement Object
                                            (
                                                [modul_header] => 
            					Daten
            				
                                                [modul_text] => 
            					Interessant
            				
                                            )
            
                                        [3] => SimpleXMLElement Object
                                            (
                                                [modul_header] => 
            					Angebot
            				
                                                [modul_text] => 
            					Interessant
            				
                                            )
            
                                        [4] => SimpleXMLElement Object
                                            (
                                                [modul_header] => 
            					Bewertung
            				
                                                [modul_text] => 
            					Unteressant
            				
                                            )
            
                                    )
            
                            )
            
                    )
            
            )
            The string "()()" is not palindrom but the String "())(" is.

            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Ja, da hatte ich beim hierher kopieren einen Fehler gemacht, sorry.

              Ich glaube ich habe den Übeltäter. Im XML sind die Felder mit
              <![CDATA[]]> umrahmt. Kann man das irgendwie ignorieren?

              Kommentar


              • #8
                1. umrahmt?
                2. von CDATA ist oben nichts zu sehen.

                Ansonsten:

                PHP-Code:
                <?php
                error_reporting
                (-1);
                $str =
                '<?xml version="1.0" encoding="utf-8"?>
                <source>
                    <anlagen>
                        <anlage>
                            <text_modules>
                                <modul_header>
                                    Werbung
                                </modul_header>
                                <modul_text>
                                    Uninteressant
                                </modul_text>
                            </text_modules>
                            <text_modules>
                                <modul_header>
                                    Aufgaben
                                </modul_header>
                                <modul_text>
                                    Interessant
                                </modul_text>
                            </text_modules>
                            <text_modules>
                                <modul_header>
                                    Daten
                                </modul_header>
                                <modul_text>
                                    Interessant
                                </modul_text>
                            </text_modules>
                            <text_modules>
                                <modul_header>
                                    Angebot
                                </modul_header>
                                <modul_text>
                                    Interessant
                                </modul_text>
                            </text_modules>
                            <text_modules>
                                <modul_header>
                                    Bewertung
                                </modul_header>
                                <modul_text>
                                    Unteressant
                                </modul_text>
                            </text_modules>
                        </anlage>
                    </anlagen>
                </source>'
                ;
                    
                $xml simplexml_load_string($str);
                foreach (
                $xml->anlagen->anlage->text_modules as $inhalt) {
                    echo 
                $inhalt->modul_text."<br>";
                }

                /* 
                  Uninteressant 
                  Interessant 
                  Interessant 
                  Interessant 
                  Unteressant 
                */
                The string "()()" is not palindrom but the String "())(" is.

                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Zitat von hausl Beitrag anzeigen
                  1. umrahmt?
                  Das Verstehe ich unter umrahmt:
                  <![CDATA[Interessant]]>

                  Zitat von hausl Beitrag anzeigen
                  2. von CDATA ist oben nichts zu sehen.]]>
                  Konnte den eigentlichen Inhalt der xml hier nicht posten. Darum hatte ich nur das wichtigste kopiert.

                  Bei mir funktioniert ja folgendes:
                  Code:
                  	foreach ($anlagen as $datum_sort) {
                  		foreach ($datum_sort as $anlage) {
                  			foreach ($anlage->text_modules as $inhalt) {
                  				$inhalt_array[]=$inhalt->modul_text;
                  			}
                  			echo $inhalt_array[1];
                  		}
                  	}
                  Mir wird das zweite Feld damit ausgegeben, oder welches Feld auch immer ich wähle. Allerdings bleibt dieser Wert für jede weitere Anlage gleich. Diese haben aber unterschiedlichen Inhalt. Woran könnte das liegen? Bringt mich echt um meinen Schlaf. Hoffentlich nicht auch deinen

                  Kommentar


                  • #10
                    Versteh dein Problem nicht.. das CDATA ändert nichts an meinem Post oben.. Meines Wissens "defineirt" das CDATA "nur" das es sich tatsälich um Inhalts-Daten und kein Element ("Tags") handelt... Auch wenn ich mich da nicht so gut auskenne - habs von hier: http://www.w3.org/TR/REC-xml/#sec-cdata-sect

                    Schau - Test:

                    PHP-Code:
                    <?php
                    error_reporting
                    (-1);

                    $str '<?xml version="1.0" encoding="utf-8"?>
                    <source>
                        <anlagen>
                            <anlage>
                                <text_modules>
                                    <modul_header>
                                        Werbung
                                    </modul_header>
                                    <modul_text>
                                        <![CDATA[Uninteressant]]>
                                    </modul_text>
                                </text_modules>
                                <text_modules>
                                    <modul_header>
                                        Aufgaben
                                    </modul_header>
                                    <modul_text>
                                        <![CDATA[Interessant]]>
                                    </modul_text>
                                </text_modules>
                                <text_modules>
                                    <modul_header>
                                        Daten
                                    </modul_header>
                                    <modul_text>
                                        <![CDATA[Interessant]]>
                                    </modul_text>
                                </text_modules>
                                <text_modules>
                                    <modul_header>
                                        Angebot
                                    </modul_header>
                                    <modul_text>
                                        <![CDATA[Interessant]]>
                                    </modul_text>
                                </text_modules>
                                <text_modules>
                                    <modul_header>
                                        Bewertung
                                    </modul_header>
                                    <modul_text>
                                        <![CDATA[Unteressant]]>
                                    </modul_text>
                                </text_modules>
                            </anlage>
                        </anlagen>
                    </source>'
                    ;
                        
                    $xml simplexml_load_string($str);

                    foreach (
                    $xml->anlagen->anlage->text_modules as $inhalt) {
                        echo 
                    $inhalt->modul_text."<br>";
                    }
                    gibt nach wie vor:

                    PHP-Code:
                    /*
                      Uninteressant 
                      Interessant 
                      Interessant 
                      Interessant 
                      Unteressant 
                    */ 
                    LG
                    The string "()()" is not palindrom but the String "())(" is.

                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Ich verstehe mein Problem ja leider auch nicht

                      Jedenfalls ist es so, dass wenn ich
                      Code:
                      foreach ($anlage->text_modules as $inhalt) {
                      echo $inhalt->modul_text;
                      }
                      mache ich keine Inhalte bekomme. Wenn ich aber das CDATA aus einem Feld entferne, wird mir dieses dann ausgegeben.

                      Kommentar


                      • #12
                        Dann mach doch nicht so

                        Welche Infos benötigst du? Ausgehend von dem XML-String in #10 (mit CDATA):

                        PHP-Code:
                        // ... siehe #10

                        foreach ($xml->anlagen->anlage->text_modules as $inhalt) {
                            echo 
                        $inhalt->modul_header.": ".$inhalt->modul_text."<br>";
                        }

                        /*
                         Werbung: Uninteressant 
                         Aufgaben: Interessant 
                         Daten: Interessant 
                         Angebot: Interessant 
                         Bewertung: Unteressant 
                        */ 
                        The string "()()" is not palindrom but the String "())(" is.

                        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                        PHP.de Wissenssammlung | Kein Support per PN

                        Kommentar


                        • #13
                          Code:
                          <?xml version="1.0" encoding="utf-8"?>
                          <source>
                              <anlagen>
                                  <anlage>
                                      <text_modules>
                                          <modul_header>
                                              Werbung
                                          </modul_header>
                                          <modul_text>
                                              <![CDATA[Uninteressant]]>
                                          </modul_text>
                                      </text_modules>
                                      <text_modules>
                                          <modul_header>
                                              Aufgaben
                                          </modul_header>
                                          <modul_text>
                                              <![CDATA[Interessant]]>
                                          </modul_text>
                                      </text_modules>
                                      <text_modules>
                                          <modul_header>
                                              Daten
                                          </modul_header>
                                          <modul_text>
                                              <![CDATA[Interessant]]>
                                          </modul_text>
                                      </text_modules>
                                      <text_modules>
                                          <modul_header>
                                              Angebot
                                          </modul_header>
                                          <modul_text>
                                              <![CDATA[Interessant]]>
                                          </modul_text>
                                      </text_modules>
                                      <text_modules>
                                          <modul_header>
                                              Bewertung
                                          </modul_header>
                                          <modul_text>
                                              <![CDATA[Unteressant]]>
                                          </modul_text>
                                      </text_modules>
                                  </anlage>
                                  <anlage>
                                      <text_modules>
                                          <modul_header>
                                              Werbung
                                          </modul_header>
                                          <modul_text>
                                              <![CDATA[Uninteressant2]]>
                                          </modul_text>
                                      </text_modules>
                                      <text_modules>
                                          <modul_header>
                                              Aufgaben
                                          </modul_header>
                                          <modul_text>
                                              <![CDATA[Interessant2]]>
                                          </modul_text>
                                      </text_modules>
                                      <text_modules>
                                          <modul_header>
                                              Daten
                                          </modul_header>
                                          <modul_text>
                                              <![CDATA[Interessant2]]>
                                          </modul_text>
                                      </text_modules>
                                      <text_modules>
                                          <modul_header>
                                              Angebot
                                          </modul_header>
                                          <modul_text>
                                              <![CDATA[Interessant2]]>
                                          </modul_text>
                                      </text_modules>
                                      <text_modules>
                                          <modul_header>
                                              Bewertung
                                          </modul_header>
                                          <modul_text>
                                              <![CDATA[Unteressant2]]>
                                          </modul_text>
                                      </text_modules>
                                  </anlage>
                          	</anlagen>
                          </source>
                          Ich brauchs für mehrere Daten. Und hatte es so versucht:

                          Code:
                          foreach ($file->anlagen as $anlage) {
                          	foreach ($anlage->text_modules as $inhalt) {
                          		$inhalt_array[]=$inhalt->modul_text;
                          	}
                          	echo $inhalt_array[1];
                          	echo "<br>";
                          }
                          Klappt auch nicht :/

                          Kommentar


                          • #14
                            Ich brauchs für mehrere Daten
                            Ich meinte genau, was muss dabei rauskommen, welche Felder bzw. was fehlt noch konkret zB in Bezug auf meinen Schnipsel ... Hast ein Beispiel?

                            Klappt auch nicht :/
                            Ja und das bedeutet was genau?

                            Bitte etwas konkreter werden....
                            The string "()()" is not palindrom but the String "())(" is.

                            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                            PHP.de Wissenssammlung | Kein Support per PN

                            Kommentar


                            • #15
                              Eigentlich sollte in dem Fall von mir folgendes kommen:
                              Interessant
                              Interessant2

                              Und es klappt nicht, da gar nichts ausgegeben wird und auch keine Fehlermeldung auftritt.

                              Kommentar

                              Lädt...
                              X