Superheld: XML mit PHP ausgeben

0 57

XML mit PHP ausgeben

Superheld
  • xml
  1. 0
    ChrisB
  2. 0
    frankx
    1. 0
      Superheld
      1. 0
        frankx
        1. 0
          Superheld
          1. 0
            frankx
            1. 0
              Superheld
          2. 0
            frankx
            1. 0
              Superheld
              1. 0
                frankx
                1. 0
                  ChrisB
                  1. 0
                    frankx
                    1. 0
                      Superheld
                      1. 0
                        frankx
                        1. 0
                          Superheld
                          1. 0
                            frankx
                            1. 0
                              Superheld
                              1. 0
                                frankx
                            2. 0
                              Superheld
                              1. 0
                                frankx
                                1. 0
                                  Superheld
                                  1. 0
                                    frankx
                                    1. 0
                                      Superheld
                                      1. 0
                                        frankx
                                        1. 0
                                          Superheld
                                          1. 0
                                            frankx
                                            1. 0
                                              Superheld
                                              1. 0
                                                frankx
                                                1. 0
                                                  Superheld
                                                  1. 0
                                                    frankx
                                                    1. 0
                                                      Superheld
                                                      1. 0

                                                        XML xmlns Namensraum und xpath - query

                                                        frankx
                                                        1. 0
                                                          Superheld
                                                          1. 0
                                                            frankx
                                                            1. 0
                                                              Superheld
                                                            2. 0

                                                              XML attribute verknüpfen

                                                              Danny
                                                              1. 0

                                                                XML attribute verknüpfen oder Kindelement selektieren

                                                                frankx
                                                                1. 0
                                                                  Danny
                                                                  1. 0
                                                                    Superheld
                                                                    1. 0
                                                                      frankx
                                                                      1. 0
                                                                        Superheld
                                                                        1. 0

                                                                          XML Kodierung und Umlaute ersetzen

                                                                          frankx
                                                                          1. 0
                                                                            Superheld
                                                                            1. 0
                                                                              frankx
                                                                              1. 0
                                                                                Superheld
                                                                                1. 0
                                                                                  frankx
                                                                                  1. 0
                                                                                    Superheld
                                                                                    1. 0
                                                                                      frankx
                                                                                      1. 0
                                                                                        Superheld
                                                                                        1. 0

                                                                                          Nodelist und foreach / Iteration

                                                                                          frankx
                                                                                          1. 0
                                                                                            Superheld
                                                                                            1. 0
                                                                                              frankx
                                                                                              1. 0
                                                                                                Superheld
                                                                                                1. 0
                                                                                                  Superheld
                                                                          2. 0
                                                                            Danny
                                                                            1. 0
                                                                              frankx

Hallo zusammen,

ich komme zu keiner Lösung.
Die Ausgabe des Objekts sieht folgendermaßen aus:(gebe hier nur mal die ersten zeilen an):

object(SimpleXMLElement)#1 (2) {
  ["@attributes"]=>
  array(3) {
    ["TimeStamp"]=>
    string(29) "2008-02-29T03:03:31.384+01:00"
    ["Version"]=>
    string(5) "1.006"
    ["PrimaryLangID"]=>
    string(2) "en"
  }
  ["CarDescriptiveContents"]=>
  object(SimpleXMLElement)#2 (1) {
    ["CarDescriptiveContent"]=>
    object(SimpleXMLElement)#3 (7) {
      ["@attributes"]=>
      array(7) {
        ["UnitOfMeasureCode"]=>
        string(1) "2"
        ["CarCode"]=>
        string(4) "4711"
        ["CurrencyCode"]=>
        string(3) "EUR"
        ["CarName"]=>
        string(29) "Golf"
        ["BrandName"]=>
        string(7) "VW"
        ["ID"]=>
        string(4) "4711"
        ["TimeZone"]=>
        string(5) "GMT+1"
      }
      ["CarInfo"]=>
      object(SimpleXMLElement)#4 (7) {
        ["@attributes"]=>
        array(2) {
          ["WhenBuilt"]=>
          string(4) "1999"
          ["CarStatusCode"]=>
          string(1) "1"
        }
        ["CarName"]=>
        object(SimpleXMLElement)#10 (1) {
          ["@attributes"]=>
          array(1) {
            ["CarShortName"]=>
            string(29) "Golf"
          }
        }

Ich möchte nun die Variablen einzeln ausgeben:

<?php
$Variable = simplexml_load_file("car.xml");

echo $Variable->CarDescriptiveContents->CarDescriptiveContent[attributes]->CarName;
?>

es wird nichts ausgeben...
Kann mir jemand helfen?

Vielen Dank

  1. Hi,

    $Variable = simplexml_load_file("car.xml");

    echo $Variable->CarDescriptiveContents->CarDescriptiveContent[attributes]->CarName;

    Woher hast du diese Syntax mit dem CarDescriptiveContent[attributes]?

    es wird nichts ausgeben...

    error_reporting (hoffentlich) auf E_ALL und display_errors auf on?

    MfG ChrisB

  2. Hellihello

    echo $Variable->CarDescriptiveContents->CarDescriptiveContent["CarName"];

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
    1. vielen dank-so klappt es. habe noch eine frage:
      wie kann ich hier die var "Quantity" über die var "Code" ausgeben?

      <CarInfo Code="1" Quantity="10">
      <CarInfo Code="2" Quantity="22">
      <CarInfo Code="3" Quantity="23">
      <CarInfo Code="4" Quantity="42">
      <CarInfo Code="5" Quantity="33">
      <CarInfo Code="6" Quantity="87">

      so klappts nicht:

      $xml->CarDescriptiveContents->CarDescriptiveContent->CarInfo->CategoryCodes->CarInfo->Code[28]->Quantity;

      1. Hellihello

        vielen dank-so klappt es. habe noch eine frage:
        wie kann ich hier die var "Quantity" über die var "Code" ausgeben?

        <CarInfo Code="1" Quantity="10">
        <CarInfo Code="2" Quantity="22">
        <CarInfo Code="3" Quantity="23">
        <CarInfo Code="4" Quantity="42">
        <CarInfo Code="5" Quantity="33">
        <CarInfo Code="6" Quantity="87">

        so klappts nicht:

        $xml->CarDescriptiveContents->CarDescriptiveContent->CarInfo->CategoryCodes->CarInfo->Code[28]->Quantity;

        Das ist auch etwas lang das alles.

        Du musst ja das element finden, wo code=6 ist und dann willst du die quantity.

        Du hast aber nur $xml->CarInfo["code"] oder $xml->CarInfo["quantity"].

        a) wenn du mit einer foreachschleife die $xml->CarInfo durchläufst und dann "code" testest, kannst du dir dann die quantity ausgeben lassen.

        b) $CarInfoCode3 = $xml->xpath("//CarInfo[@Code=3]"); und dann $CarInfoCode3["quantity"].
        Zumindest dem Prinzip nach. Wie du den Attributwert mit xpath testest, hab ich nicht im Kopp.

        Dank und Gruß,

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt
        1. habe nun die halbe nacht "gebastelt"-leider ohne ergebnis...

          $CarInfoCode3 = $xml->xpath("//CarInfo[@Code=3]");
          $CarInfoCode3["quantity"];
          echo $CarInfoCode3;

          hat vielleicht jemand eine lösung?

          viele grüsse

          1. Hellihello

            was Du erhälst ist ein Node list (es muss ja nicht nur ein Knoten im Ergebnis sein).

            Vielleicht hilft sowas wie $CarInfoCode3[0]["quantity"] oder so. Ein Var_dump könnte aufschluss geben. Die halbe Nacht ist immer blöd, da verfuzzelt man sich doch gnadenlos.

            XML und xpath find ich ein bisschen tricky, aber schlussendlich scheints stringent.

            Dank und Gruß,

            frankx

            --
            tryin to multitain  - Globus = Planet != Welt
            1. Hellihello

              was Du erhälst ist ein Node list (es muss ja nicht nur ein Knoten im Ergebnis sein).

              Vielleicht hilft sowas wie $CarInfoCode3[0]["quantity"] oder so. Ein Var_dump könnte aufschluss geben. Die halbe Nacht ist immer blöd, da verfuzzelt man sich doch gnadenlos.

              XML und xpath find ich ein bisschen tricky, aber schlussendlich scheints stringent.

              Dank und Gruß,

              frankx

              hier mal der relevante ausschnitt aus var_dump:

              [3]=>
                          object(SimpleXMLElement)#21 (2) {
                            ["@attributes"]=>
                            array(2) {
                              ["Code"]=>
                              string(2) "28"
                              ["Quantity"]=>
                              string(3) "246"
                            }
                            }

          2. Hellihello

              
              
            <?php  
            $xml_string=  
            '<?xml version="1.0"?>  
            <wurzel>  
            <CarInfo Code="1" Quantity="10"/>  
            <CarInfo Code="2" Quantity="22"/>  
            <CarInfo Code="3" Quantity="23"/>  
            <CarInfo Code="4" Quantity="42"/>  
            <CarInfo Code="5" Quantity="33"/>  
            <CarInfo Code="6" Quantity="87"/>  
            </wurzel>';  
            // echo $xml_string;  
             $simple_xml = simplexml_load_string($xml_string);  
            // var_dump($simple_xml);  
             $query_string="//CarInfo[@Quantity=22]";  
             $node_list = $simple_xml->xpath($query_string);  
             var_dump($node_list);  
             echo $node_list[0]["Code"];  
            
            

            kommt 2 raus (;-).

            Dank und Gruß,

            frankx

            --
            tryin to multitain  - Globus = Planet != Welt
            1. hallo und vielen dank erstmal! ;-)
              leider klappt das ganze nicht wenn ich die daten wie folgt einlese:

              $xml = simplexml_load_file("http://blabla.de/test.xml");

              $query_string="//CarInfo[@Code=28]";
              $node_list = $xml->xpath($query_string);
              echo $node_list[0]["Quantity"];

              habe auch versucht den pfad anzugeben
              $query_string="////CarInfo[@Code=28]";

              bzw.

              $query_string="CarDescriptiveContents/CarDescriptiveContent/CarInfo/CategoryCodesCarInfo[@Code=28]";

              leider auch ohne ergebnis...

              1. Hellihello

                hallo und vielen dank erstmal! ;-)
                leider klappt das ganze nicht wenn ich die daten wie folgt einlese:

                $xml = simplexml_load_file("http://blabla.de/test.xml");

                das soll gehen? von einer fremden url?

                Dank und Gruß,

                frankx

                --
                tryin to multitain  - Globus = Planet != Welt
                1. Hi,

                  $xml = simplexml_load_file("http://blabla.de/test.xml");

                  das soll gehen? von einer fremden url?

                  Ja. (Duerfte aber wohl allow_url_fopen = on voraussetzen.)

                  MfG ChrisB

                  1. Hellihello Chris,

                    $xml = simplexml_load_file("http://blabla.de/test.xml");

                    das soll gehen? von einer fremden url?

                    Ja.

                    Ja, die Funktion ja. Ich hätte jetzt spontan gedacht, dass der fremde Server header mitliefert, die dem Auslesen des XML nicht gut täten. Habs aber nicht getestet, weils au meiner Sicht mit dem o.g. Problem nichts zu tun hat.

                    (Duerfte aber wohl allow_url_fopen = on voraussetzen.)
                    Jup. Gibts denn Konstellationen, wo das Sinn macht? Abfragen der Google-Adwords-Api oder was?

                    Dank und Gruß,

                    frankx

                    --
                    tryin to multitain  - Globus = Planet != Welt
                    1. Hellihello Chris,

                      $xml = simplexml_load_file("http://blabla.de/test.xml");

                      das soll gehen? von einer fremden url?

                      Ja.

                      Ja, die Funktion ja. Ich hätte jetzt spontan gedacht, dass der fremde Server header mitliefert, die dem Auslesen des XML nicht gut täten. Habs aber nicht getestet, weils au meiner Sicht mit dem o.g. Problem nichts zu tun hat.

                      (Duerfte aber wohl allow_url_fopen = on voraussetzen.)
                      Jup. Gibts denn Konstellationen, wo das Sinn macht? Abfragen der Google-Adwords-Api oder was?

                      Dank und Gruß,

                      frankx

                      Hallo,

                      hier schreibt noch einmal der "Verursacher" des Problems. ;-)
                      Die mir gestellte Aufgabe ist es, einige Daten aus einer externen XML-Datei in eine MYSQL-Datenbank zu importieren. Da nicht jede XML die gleiche Grösse bzw. die gleiche Struktur aufweist muss ich die einzelnen Daten über den "Code" ansprechen...

                      Ist es ggf. Möglich die externe XML via include in mein Script  einzulesen und dann zu verarbeiten?

                      Vielen Dank

                      1. Hellihello

                        hier schreibt noch einmal der "Verursacher" des Problems. ;-)
                        Die mir gestellte Aufgabe ist es, einige Daten aus einer externen XML-Datei in eine MYSQL-Datenbank zu importieren. Da nicht jede XML die gleiche Grösse bzw. die gleiche Struktur aufweist muss ich die einzelnen Daten über den "Code" ansprechen...

                        Ist es ggf. Möglich die externe XML via include in mein Script  einzulesen und dann zu verarbeiten?

                        Ist doch garnicht nötig. http://multitain.de/selfhtml/xml_read_from_url.php - das Laden auf der URL ist doch möglich.

                        Dank und Gruß,

                        frankx

                        --
                        tryin to multitain  - Globus = Planet != Welt
                        1. Hellihello

                          hier schreibt noch einmal der "Verursacher" des Problems. ;-)
                          Die mir gestellte Aufgabe ist es, einige Daten aus einer externen XML-Datei in eine MYSQL-Datenbank zu importieren. Da nicht jede XML die gleiche Grösse bzw. die gleiche Struktur aufweist muss ich die einzelnen Daten über den "Code" ansprechen...

                          Ist es ggf. Möglich die externe XML via include in mein Script  einzulesen und dann zu verarbeiten?

                          Ist doch garnicht nötig. http://multitain.de/selfhtml/xml_read_from_url.php - das Laden auf der URL ist doch möglich.

                          Dank und Gruß,

                          frankx

                          aber warum bekomme ich dann hier kein ergebnis?

                          $xml = simplexml_load_file("http://blabla.de/test.xml");

                          $query_string="//CarInfo[@Code=28]";
                          $node_list = $xml->xpath($query_string);
                          echo $node_list[0]["Quantity"];

                          werde wahnsinnig... ;-)

                          1. Hellihello

                            aber warum bekomme ich dann hier kein ergebnis?

                            $xml = simplexml_load_file("http://blabla.de/test.xml");

                            $query_string="//CarInfo[@Code=28]";
                            $node_list = $xml->xpath($query_string);
                            echo $node_list[0]["Quantity"];

                            werde wahnsinnig... ;-)

                            Weil Du nicht Schritt für Schritt vorgehst vielleicht?

                            Teste:

                            1. mit asXML, ob Du die Daten korrekt lädst
                            2. mit var_dump, was deine Nodelist enthält
                            3. mit var_dump, was zB. $node_list[0] enthält.

                            Nur wenn Du mindestens das getestet hast, kanns Du als _letzem_ Schritt, auf das Attribut ["Quantity"] zugreifen.

                            Solang Du nur von blabla.de sprichst (nimm doch lieber example.com), ist es auch von "remote" nicht möglich, Fehler zu finden. Dazu braucht es zugriff auf die Daten (XML) bzw. Kenntnis davon (posten hier) und auf den relevanten Code (alle Bestandteile, die genutzt werden).

                            Dank und Gruß,

                            frankx

                            --
                            tryin to multitain  - Globus = Planet != Welt
                            1. Hellihello

                              aber warum bekomme ich dann hier kein ergebnis?

                              $xml = simplexml_load_file("http://blabla.de/test.xml");

                              $query_string="//CarInfo[@Code=28]";
                              $node_list = $xml->xpath($query_string);
                              echo $node_list[0]["Quantity"];

                              werde wahnsinnig... ;-)

                              Weil Du nicht Schritt für Schritt vorgehst vielleicht?

                              Teste:

                              1. mit asXML, ob Du die Daten korrekt lädst
                              2. mit var_dump, was deine Nodelist enthält
                              3. mit var_dump, was zB. $node_list[0] enthält.

                              Nur wenn Du mindestens das getestet hast, kanns Du als _letzem_ Schritt, auf das Attribut ["Quantity"] zugreifen.

                              Solang Du nur von blabla.de sprichst (nimm doch lieber example.com), ist es auch von "remote" nicht möglich, Fehler zu finden. Dazu braucht es zugriff auf die Daten (XML) bzw. Kenntnis davon (posten hier) und auf den relevanten Code (alle Bestandteile, die genutzt werden).

                              Dank und Gruß,

                              frankx

                              Ich habe nun "getestet":

                              1. echo $xml->asXML(); //gibt mir wie zu erwarten das XML-File aus
                              2. var_dump($node_list); // gibt "array(0) { }" aus => und da ist das Problem

                              1. Hellihello

                                1. echo $xml->asXML(); //gibt mir wie zu erwarten das XML-File aus

                                Den solltest Du posten.

                                1. var_dump($node_list); // gibt "array(0) { }" aus => und da ist das

                                Genau, der Query-String matched nicht. Waru, ist ohne XML-Quelle
                                nicht zu sagen.

                                Dank und Gruß,

                                frankx

                                --
                                tryin to multitain  - Globus = Planet != Welt
                            2. Hellihello

                              aber warum bekomme ich dann hier kein ergebnis?

                              $xml = simplexml_load_file("http://blabla.de/test.xml");

                              $query_string="//CarInfo[@Code=28]";
                              $node_list = $xml->xpath($query_string);
                              echo $node_list[0]["Quantity"];

                              werde wahnsinnig... ;-)

                              Weil Du nicht Schritt für Schritt vorgehst vielleicht?

                              Teste:

                              1. mit asXML, ob Du die Daten korrekt lädst
                              2. mit var_dump, was deine Nodelist enthält
                              3. mit var_dump, was zB. $node_list[0] enthält.

                              Nur wenn Du mindestens das getestet hast, kanns Du als _letzem_ Schritt, auf das Attribut ["Quantity"] zugreifen.

                              Solang Du nur von blabla.de sprichst (nimm doch lieber example.com), ist es auch von "remote" nicht möglich, Fehler zu finden. Dazu braucht es zugriff auf die Daten (XML) bzw. Kenntnis davon (posten hier) und auf den relevanten Code (alle Bestandteile, die genutzt werden).

                              Dank und Gruß,

                              frankx

                              Nochmal Hallo,

                              das gesamte XML-File ist arg gross-daher hier die relevanten ´Daten:

                              <?xml version="1.0" encoding="UTF-8" ?>

                              • <CARDescriptiveContentNotifRQ>
                              • <CARDescriptiveContents>
                              • <CARDescriptiveContent>
                              • <CARInfo WhenBuilt="1999" CARStatusCode="1">
                                  <CARName CARShortName="Golf" />
                              • <CategoryCodes>
                                  <LocationCategory Code="4" />
                                  <SegmentCategory Code="4" />
                                  <CARCategory Code="20" />
                                  <CARTECInfo Code="5" Quantity="6" />
                              • <CARTECInfo Code="35" Quantity="2">
                              • <Description>
                                  <Text Language="en">aa</Text>
                                  <Text Language="fr">bb</Text>
                                  <Text Language="de">cc</Text>
                                  <Text Language="it">dd</Text>
                                  <Text Language="es">ee</Text>
                                  <Text Language="pt">ff</Text>
                                  </Description>
                                  </CARTECInfo>
                              • <CARTECInfo Code="1" Quantity="2">
                              • <Description>
                                  <Text Language="en">gg</Text>
                                  <Text Language="fr">hh</Text>
                                  <Text Language="de">jj</Text>
                                  <Text Language="it">kk</Text>
                                  <Text Language="es">mm</Text>
                                  <Text Language="pt">nn</Text>
                                  </Description>
                                  </CARTECInfo>
                              • <CARTECInfo Code="2" Quantity="44">
                              • <Description>
                                  <Text Language="en">oo</Text>
                                  <Text Language="fr">pp</Text>
                                  <Text Language="de">qq</Text>
                                  <Text Language="it">rr</Text>
                                  <Text Language="es">tt</Text>
                                  <Text Language="pt">uu</Text>
                                  </Description>
                                  </CARTECInfo>
                              • <CARTECInfo Code="3" Quantity="22">
                              • <Description>
                                  <Text Language="en">vv</Text>
                                  <Text Language="fr">ww</Text>
                                  <Text Language="de">xx</Text>
                                  <Text Language="it">yy</Text>
                                  <Text Language="es">zz</Text>
                                  <Text Language="pt">zzz</Text>
                                  </Description>
                                  </CARTECInfo>
                              • <CARTECInfo Code="28" Quantity="92">
                              • <Description>
                                  <Text Language="en">Total</Text>
                                  </Description>
                                  </CARTECInfo>
                                  </CategoryCodes>

                              Habe nochmal getestet:

                              $xml_string = file_get_contents("http://example.com/test.xml");
                              $simple_xml = simplexml_load_string($xml_string);

                              $query_string="//CARTECInfo[@Code=28]";
                              $node_list = $simple_xml->xpath($query_string);

                              var_dump($node_list); //Ausgabe "array(0) { }"

                              echo $simple_xml->asXML(); das o.a. XML

                              echo $node_list[0]["Quantity"]; keine Ausgabe

                              1. Hellihello

                                  
                                  
                                <?php  
                                  
                                $xml_string =  
                                '<?xml version="1.0" encoding="UTF-8" ?>  
                                <CategoryCodes>  
                                  <LocationCategory Code="4" />  
                                  <SegmentCategory Code="4" />  
                                  <CARCategory Code="20" />  
                                  <CARTECInfo Code="5" Quantity="6" />  
                                  <CARTECInfo Code="35" Quantity="2">  
                                 <Description>  
                                  <Text Language="en">aa</Text>  
                                  <Text Language="fr">bb</Text>  
                                  <Text Language="de">cc</Text>  
                                  <Text Language="it">dd</Text>  
                                  <Text Language="es">ee</Text>  
                                  <Text Language="pt">ff</Text>  
                                  </Description>  
                                  </CARTECInfo>  
                                 <CARTECInfo Code="1" Quantity="2">  
                                 <Description>  
                                  <Text Language="en">gg</Text>  
                                  <Text Language="fr">hh</Text>  
                                  <Text Language="de">jj</Text>  
                                  <Text Language="it">kk</Text>  
                                  <Text Language="es">mm</Text>  
                                  <Text Language="pt">nn</Text>  
                                  </Description>  
                                  </CARTECInfo>  
                                 <CARTECInfo Code="2" Quantity="44">  
                                 <Description>  
                                  <Text Language="en">oo</Text>  
                                  <Text Language="fr">pp</Text>  
                                  <Text Language="de">qq</Text>  
                                  <Text Language="it">rr</Text>  
                                  <Text Language="es">tt</Text>  
                                  <Text Language="pt">uu</Text>  
                                  </Description>  
                                  </CARTECInfo>  
                                 <CARTECInfo Code="3" Quantity="22">  
                                 <Description>  
                                  <Text Language="en">vv</Text>  
                                  <Text Language="fr">ww</Text>  
                                  <Text Language="de">xx</Text>  
                                  <Text Language="it">yy</Text>  
                                  <Text Language="es">zz</Text>  
                                  <Text Language="pt">zzz</Text>  
                                  </Description>  
                                  </CARTECInfo>  
                                 <CARTECInfo Code="28" Quantity="92">  
                                 <Description>  
                                  <Text Language="en">Total</Text>  
                                  </Description>  
                                  </CARTECInfo>  
                                  </CategoryCodes>  
                                ';  
                                  
                                //$xml_string = file_get_contents("http://example.com/test.xml");  
                                $simple_xml = simplexml_load_string($xml_string);  
                                  
                                $query_string="//CARTECInfo[@Code=28]";  
                                $node_list = $simple_xml->xpath($query_string);  
                                  
                                var_dump($node_list); //Ausgabe "array(0) { }"  
                                  
                                echo $simple_xml->asXML();  
                                  
                                echo $node_list[0]["Quantity"];  
                                  
                                  
                                  
                                  
                                
                                

                                gibt bei mir, nach Ausgabe des xml-Strings, 92 aus, und das ist auch korrekt so:

                                Ausgabe:

                                ...
                                 <CARTECInfo Code="28" Quantity="92">
                                 <Description>
                                  <Text Language="en">Total</Text>
                                  </Description>
                                  </CARTECInfo>
                                  </CategoryCodes>
                                92>Exit code: 0

                                Beschränke doch zur Fehlersuche Dich erstmal auf ein Element im Wurzelelement und kriege das zu packen. Und kopier mal meinen etwas eingekürzten XMLString mit Code in deine Umgebung exakt so und schau, ob Du nicht auch 92 rausbekommst...;

                                Dank und Gruß,

                                frankx

                                --
                                tryin to multitain  - Globus = Planet != Welt
                                1. Hallo,
                                  wenn ich die Daten so in mein Script eingebe klappt es bei mir auch-nur sobald ich die externe XML verwenden will bekomme ich kein Ergebnis.
                                  Einzele Daten kann ich doch auch ausgeben => z.b.:

                                  $email = $xml->CarDescriptiveContents->CarDescriptiveContent->ContactInfos->ContactInfo->Emails->Email;

                                  ich verzweifel langsam...

                                  1. Hellihello

                                    $email = $xml->CarDescriptiveContents->CarDescriptiveContent->ContactInfos->ContactInfo->Emails->Email;

                                    Ja ist doch cool.

                                    ich verzweifel langsam...

                                    Vielleicht, weil Du nicht weitertestest. Was ist, wenn Du als Query zB "//CarDescriptiveContent" angibst? Etc. Versuche erstmal, überhaupt mit einer Query eine Nodelist mit Inhalt zu erzeugen.

                                    Vermutung: entweder stimmt das Suchelement im Query-String nicht, oder das Attribut, oder der Wert (stimmen Groß und Kleinschreibung? Kommt der Wert 28 wirklich vor? Geht es mit einem anderen Wert? Was steht in der Nodeliste, wenn du das =28 weglässt //elementname[@attributename] heißt: alle Elemente irgendwo im Dokument, die ein Attribut mit Namen attributname haben).

                                    Auch

                                    Dank und Gruß,

                                    frankx

                                    --
                                    tryin to multitain  - Globus = Planet != Welt
                                    1. na du hast ja wirklich eine Engelsgedult! ;-)
                                      Ich habe mir nun die externe XML kopiert, als XML-Datei auf meinen Server abgelegt und versucht diese "anzusprechen" => das klappt!
                                      Mir werden die richtigen Daten ausgegeben.

                                      So klappts:
                                      $xml_string = file_get_contents("test.xml");
                                      $simple_xml = simplexml_load_string($xml_string);

                                      So nicht:
                                      $xml_string = file_get_contents("http://example.com/test.xml");
                                      $simple_xml = simplexml_load_string($xml_string);

                                      Trinke ich vielleicht zu viel? :-O

                                      1. Hellihello

                                        na du hast ja wirklich eine Engelsgedult! ;-)

                                        Immer ein Schrittchen nach dem anderen, gelle. Sonst verstolpert man sich.

                                        Ich habe mir nun die externe XML kopiert, als XML-Datei auf meinen Server abgelegt und versucht diese "anzusprechen" => das klappt!
                                        Mir werden die richtigen Daten ausgegeben.

                                        Will heißen: die query "matched", also du erhälst deine "92" zB.?

                                        So klappts:
                                        $xml_string = file_get_contents("test.xml");
                                        $simple_xml = simplexml_load_string($xml_string);

                                        Genau.

                                        So nicht:
                                        $xml_string = file_get_contents("http://example.com/test.xml");
                                        $simple_xml = simplexml_load_string($xml_string);

                                        Das hatte mich auch gewundert. Denn file_get_contents aus einer Url könnte ja noch mehr beinhalten, denn es ist ja nicht einfach der Dateiinhalt sondern eine http-response, die dort übermittelt wird.

                                        Was aber geht ist simplexml_load_file(url). Vielleicht schneidet dann die Funktion die übermittelten header ab?

                                        Das heißt nun schlussendlich: es geht mit dem Datensatz. Und mit der o.g. Funktion sollte es dann auch via URL gehen.

                                        Trinke ich vielleicht zu viel? :-O

                                        Oder zuwenig? (;-).

                                        Dank und Gruß,

                                        frankx

                                        --
                                        tryin to multitain  - Globus = Planet != Welt
                                        1. aber das habe ich doch bereits versucht-siehe weiter oben..

                                          $xml_string= simplexml_load_file("http://example.com/test.xml");
                                          $simple_xml = simplexml_load_string($xml_string);

                                          $query_string="//CarInfo[@Code=28]";
                                          $node_list = $xml->xpath($query_string);
                                          echo $node_list[0]["Quantity"];

                                          1. Hellihello

                                            aber das habe ich doch bereits versucht-siehe weiter oben..

                                            $xml_string= simplexml_load_file("http://example.com/test.xml");
                                            $simple_xml = simplexml_load_string($xml_string);

                                            Das ist falsch, meine ich.

                                            Richtig ist:

                                            $simple_xml = simplexml_load_file("http://example.com/test.xml");

                                            $query_string="//CarInfo[@Code=28]";
                                            $node_list = $xml->xpath($query_string);
                                            echo $node_list[0]["Quantity"];

                                            Das wiederum hängt ja nur von o.g. ab.

                                            Dank und Gruß,

                                            frankx

                                            --
                                            tryin to multitain  - Globus = Planet != Welt
                                            1. Hellihello

                                              aber das habe ich doch bereits versucht-siehe weiter oben..

                                              $xml_string= simplexml_load_file("http://example.com/test.xml");
                                              $simple_xml = simplexml_load_string($xml_string);

                                              Das ist falsch, meine ich.

                                              Richtig ist:

                                              $simple_xml = simplexml_load_file("http://example.com/test.xml");

                                              $query_string="//CarInfo[@Code=28]";
                                              $node_list = $xml->xpath($query_string);
                                              echo $node_list[0]["Quantity"];

                                              Das wiederum hängt ja nur von o.g. ab.

                                              Dank und Gruß,

                                              frankx

                                              Hallo,
                                              auch das habe ich versucht => ergebnislos...

                                              $simple_xml = simplexml_load_file("http://example.com/test.xml");
                                              $query_string="//CarInfo[@Code=28]";
                                              $node_list = $simple_xml->xpath($query_string);

                                              var_dump($node_list); // Ausgabe "array(0) { } "

                                              echo $node_list[0]["Quantity"]; //keine Ausgabe

                                              echo $simple_xml; //keine Ausgabe

                                              1. Hellihello

                                                aber das habe ich doch bereits versucht-siehe weiter oben..

                                                $xml_string= simplexml_load_file("http://example.com/test.xml");
                                                $simple_xml = simplexml_load_string($xml_string);

                                                Das ist falsch, meine ich.

                                                Richtig ist:

                                                $simple_xml = simplexml_load_file("http://example.com/test.xml");

                                                $query_string="//CarInfo[@Code=28]";
                                                $node_list = $xml->xpath($query_string);
                                                echo $node_list[0]["Quantity"];

                                                auch das habe ich versucht => ergebnislos...

                                                Naja, was sagt var_dump ($simple_xml).

                                                echo $simple_xml->asXML();?

                                                $simple_xml = simplexml_load_file("http://example.com/test.xml");
                                                $query_string="//CarInfo[@Code=28]";
                                                $node_list = $simple_xml->xpath($query_string);

                                                var_dump($node_list); // Ausgabe "array(0) { } "

                                                Das heißt, dass es kein Element "CarInfo" gibt, dass ein Attribut "Code" hat, welches den Wert 28 hat.

                                                Auch das kannst Du Stück für Stück testen, wie schon gesagt.

                                                Der Rest ist ja nur logisch. Ein leeres Array kann keine Einträge haben (;-).

                                                Dank und Gruß,

                                                frankx

                                                --
                                                tryin to multitain  - Globus = Planet != Welt
                                                1. Hellihello

                                                  aber das habe ich doch bereits versucht-siehe weiter oben..

                                                  $xml_string= simplexml_load_file("http://example.com/test.xml");
                                                  $simple_xml = simplexml_load_string($xml_string);

                                                  Das ist falsch, meine ich.

                                                  Richtig ist:

                                                  $simple_xml = simplexml_load_file("http://example.com/test.xml");

                                                  $query_string="//CarInfo[@Code=28]";
                                                  $node_list = $xml->xpath($query_string);
                                                  echo $node_list[0]["Quantity"];

                                                  auch das habe ich versucht => ergebnislos...

                                                  Naja, was sagt var_dump ($simple_xml).

                                                  echo $simple_xml->asXML();?

                                                  $simple_xml = simplexml_load_file("http://example.com/test.xml");
                                                  $query_string="//CarInfo[@Code=28]";
                                                  $node_list = $simple_xml->xpath($query_string);

                                                  var_dump($node_list); // Ausgabe "array(0) { } "

                                                  Das heißt, dass es kein Element "CarInfo" gibt, dass ein Attribut "Code" hat, welches den Wert 28 hat.

                                                  Auch das kannst Du Stück für Stück testen, wie schon gesagt.

                                                  Der Rest ist ja nur logisch. Ein leeres Array kann keine Einträge haben (;-).

                                                  Dank und Gruß,

                                                  frankx

                                                  Ja, aber es gibt doch das Element "CarInfo" welches dass Attribut "Code" hat, welches den Wert 28 hat...

                                                  Ich habe auch versucht nur "$query_string="//CarInfo";" auszugeben => auch erfolglos...

                                                  wenn ich wieder auf mein XML auf meinem Server verweise bekomme ich das richtige Ergebnis:

                                                  $simple_xml = simplexml_load_file("test.xml");
                                                  $query_string="//CarInfo[@Code=28]";
                                                  $node_list = $simple_xml->xpath($query_string);

                                                  echo $node_list[0]["Quantity"]; // Ausgabe "92"

                                                  Das kann doch nicht sein?

                                                  1. Hellihello

                                                    Ja, aber es gibt doch das Element "CarInfo" welches dass Attribut "Code" hat, welches den Wert 28 hat...

                                                    Ich habe auch versucht nur "$query_string="//CarInfo";" auszugeben => auch erfolglos...

                                                    wenn ich wieder auf mein XML auf meinem Server verweise bekomme ich das richtige Ergebnis:

                                                    $simple_xml = simplexml_load_file("test.xml");
                                                    $query_string="//CarInfo[@Code=28]";
                                                    $node_list = $simple_xml->xpath($query_string);

                                                    echo $node_list[0]["Quantity"]; // Ausgabe "92"

                                                    Das kann doch nicht sein?

                                                    Nun, immerhin weißt Du dass Deine query korrekt ist und funktioniert. Nicht wissen tust du, warum das nicht klappt, wenn du vermeintlich die selbe Datei vom Server lädst. Entweder sind es nicht die selben Daten, oder beim Laden passiert "etwas", dass am Ende kein passenden Simple-xml-Element erzeugt.

                                                    Var_dump sollte darüber eigentlich sofort aufschluss geben. Du könntest vieleicht auch die beiden Element vergleichen. Was immer auch sein kann, ist, dass Du verschiedene Codeschnipsel für das eine und das andere nimmst, und darin sich ein kleiner, unmerklicher Fehler verbirgt. Testbar für dritte ist das natürlich nur, wenn Du die xml ins Netz stellst und eine url zum Testen angibst. Denn mit dem xml-String als solchem gehts ja.

                                                    Dank und Gruß,

                                                    frankx

                                                    --
                                                    tryin to multitain  - Globus = Planet != Welt
                                                    1. Mir brummt der Kopf ;-)
                                                      Aber ich habe "etwas" entdeckt! Die erste <CARDescriptiveContentNotifRQ> der externen XML-Datei sieht wie folgt aus:

                                                      <CARDescriptiveContentNotifRQ xmlns="http://www.domain.org/abc/123/08">

                                                      wenn ich "xmlns="http://www.domain.org/abc/123/08" auch in meine lokale Datei schreibe lässt diese sich auch nicht verarbeiten...

                                                      1. Hellihello

                                                        Mir brummt der Kopf ;-)
                                                        Aber ich habe "etwas" entdeckt! Die erste <CARDescriptiveContentNotifRQ> der externen XML-Datei sieht wie folgt aus:

                                                        <CARDescriptiveContentNotifRQ xmlns="http://www.domain.org/abc/123/08">

                                                        wenn ich "xmlns="http://www.domain.org/abc/123/08" auch in meine lokale Datei schreibe lässt diese sich auch nicht verarbeiten...

                                                        Vermutung wäre, dass dann der Pfad nicht mehr matched. http://de.selfhtml.org/xml/regeln/namensraeume.htm.

                                                        Wie genau, müsstest du schauen. Ob dann //CARDescriptiveContentNotifRQ::ElementName zB. matchen würde? Scheint nicht logisch, aber irgendwas muss der Namensraum ja machen.

                                                        Dank und Gruß,

                                                        frankx

                                                        --
                                                        tryin to multitain  - Globus = Planet != Welt
                                                        1. Das führt leider auch zu keinem Ergebnis. Verweise mit dem ganzen Pfad =>

                                                          CARDescriptiveContentNotifRQ/CarDescriptiveContents/CarDescriptiveContent/CarInfo/CategoryCodes/CarInfo[@Code=28]";

                                                          Auf meinem Server klappt es - extern nicht.
                                                          Wieder eine schlaflose Nacht... :-)

                                                          1. Hellihello

                                                            Das führt leider auch zu keinem Ergebnis. Verweise mit dem ganzen Pfad =>

                                                            CARDescriptiveContentNotifRQ/CarDescriptiveContents/CarDescriptiveContent/CarInfo/CategoryCodes/CarInfo[@Code=28]";

                                                            Auf meinem Server klappt es - extern nicht.
                                                            Wieder eine schlaflose Nacht... :-)

                                                            http://www.phpcenter.de/de-html-manual/function.simplexml-element-registerXPathNamespace.html

                                                            Darin:

                                                            $sxe->registerXPathNamespace('c', 'http://example.org/chapter-title');
                                                            $result = $sxe->xpath('//c:title');

                                                            siehe dann im Beispiel:

                                                              
                                                            <?php  
                                                            $xml_string=  
                                                            '<?xml version="1.0"?>  
                                                            <wurzel xmlns="http://abcdefg">  
                                                            <CarInfo Code="1" Quantity="10"/>  
                                                            <CarInfo Code="2" Quantity="22"/>  
                                                            <CarInfo Code="3" Quantity="23"/>  
                                                            <CarInfo Code="4" Quantity="42"/>  
                                                            <CarInfo Code="5" Quantity="33"/>  
                                                            <CarInfo Code="6" Quantity="87"/>  
                                                            </wurzel>';  
                                                            // echo $xml_string;  
                                                             $simple_xml = simplexml_load_string($xml_string);  
                                                             $simple_xml->registerXPathNamespace('c', 'http://abcdefg');  
                                                            // var_dump($simple_xml);  
                                                             $query_string="//c:CarInfo[@Quantity=22]";  
                                                             $node_list = $simple_xml->xpath($query_string);  
                                                             var_dump($node_list);  
                                                             echo $node_list[0]["Code"];  
                                                            
                                                            

                                                            Dabei ist der Name für den Namespace egal.

                                                            <CARDescriptiveContentNotifRQ xmlns="http://www.domain.org/abc/123/08">

                                                            bringt:

                                                            $simple_xml->registerXPathNamespace('irgendwas', 'http://www.domain.org/abc/123/08');

                                                            und somit funkitioniert dann auch:

                                                            $query_string="//irgendwas:CarInfo[@Quantity=22]";

                                                            Glückwunsch.

                                                            Dank und Gruß,

                                                            frankx

                                                            --
                                                            tryin to multitain  - Globus = Planet != Welt
                                                            1. Doch keine schlaflose Nacht-vielen Dank!

                                                            2. tach zusammen,
                                                              habe das hier verfolgt und viel gelernt-vielen dank!
                                                              habe aber eine frage oder Anmerkung:
                                                              wie kann man denn Attribute verknüpfen?

                                                              euer beispiel:

                                                              <?php

                                                              $xml_string =
                                                              '<?xml version="1.0" encoding="UTF-8" ?>
                                                              <CategoryCodes>
                                                                <LocationCategory Code="4" />
                                                                <SegmentCategory Code="4" />
                                                                <CARCategory Code="20" />
                                                                <CARTECInfo Code="5" Quantity="6" />
                                                                <CARTECInfo Code="35" Quantity="2">
                                                               <Description>
                                                                <Text Language="en">aa</Text>
                                                                <Text Language="fr">bb</Text>
                                                                <Text Language="de">cc</Text>
                                                                <Text Language="it">dd</Text>
                                                                <Text Language="es">ee</Text>
                                                                <Text Language="pt">ff</Text>
                                                                </Description>
                                                                </CARTECInfo>
                                                               <CARTECInfo Code="1" Quantity="2">
                                                               <Description>
                                                                <Text Language="en">gg</Text>
                                                                <Text Language="fr">hh</Text>
                                                                <Text Language="de">jj</Text>
                                                                <Text Language="it">kk</Text>
                                                                <Text Language="es">mm</Text>
                                                                <Text Language="pt">nn</Text>
                                                                </Description>
                                                                </CARTECInfo>
                                                               <CARTECInfo Code="28" Quantity="92">
                                                               <Description>
                                                                <Text Language="en">Total</Text>
                                                                </Description>
                                                                </CARTECInfo>
                                                                </CategoryCodes>
                                                              ';

                                                              wenn ich nun den Text haben möchte in "de" wo "CARTECInfo Code="1""

                                                              $query_string="//irgendwas:CARTECInfo[@Code=1] and //irgendwas:CARTECInfo->Text[Language=de];

                                                              müsste ja "jj" rauskommen.

                                                              versteht ihr was ich meine?

                                                              1. Hellihello

                                                                tach zusammen,
                                                                habe das hier verfolgt und viel gelernt-vielen dank!
                                                                habe aber eine frage oder Anmerkung:
                                                                wie kann man denn Attribute verknüpfen?

                                                                Ich glaube nicht, dass Du in dem Fall Attribute verknüpfst sondern nach Kindelementen suchst mit bestimmter Attributbezeichnung (s.u.).

                                                                euer beispiel:

                                                                <?php

                                                                $xml_string =
                                                                '<?xml version="1.0" encoding="UTF-8" ?>
                                                                <CategoryCodes>
                                                                  <LocationCategory Code="4" />
                                                                  <SegmentCategory Code="4" />
                                                                  <CARCategory Code="20" />
                                                                  <CARTECInfo Code="5" Quantity="6" />
                                                                  <CARTECInfo Code="35" Quantity="2">
                                                                <Description>
                                                                  <Text Language="en">aa</Text>
                                                                  <Text Language="fr">bb</Text>
                                                                  <Text Language="de">cc</Text>
                                                                  <Text Language="it">dd</Text>
                                                                  <Text Language="es">ee</Text>
                                                                  <Text Language="pt">ff</Text>
                                                                  </Description>
                                                                  </CARTECInfo>
                                                                <CARTECInfo Code="1" Quantity="2">
                                                                <Description>
                                                                  <Text Language="en">gg</Text>
                                                                  <Text Language="fr">hh</Text>
                                                                  <Text Language="de">jj</Text>
                                                                  <Text Language="it">kk</Text>
                                                                  <Text Language="es">mm</Text>
                                                                  <Text Language="pt">nn</Text>
                                                                  </Description>
                                                                  </CARTECInfo>
                                                                <CARTECInfo Code="28" Quantity="92">
                                                                <Description>
                                                                  <Text Language="en">Total</Text>
                                                                  </Description>
                                                                  </CARTECInfo>
                                                                  </CategoryCodes>
                                                                ';

                                                                wenn ich nun den Text haben möchte in "de" wo "CARTECInfo Code="1""

                                                                $query_string="//irgendwas:CARTECInfo[@Code=1] and //irgendwas:CARTECInfo->Text[Language=de];

                                                                müsste ja "jj" rauskommen.

                                                                versteht ihr was ich meine?

                                                                ungetestet:

                                                                //irgendwas:CARTECInfo[@Code=1]//irgendwas::Text[@Language=de]

                                                                Das Element mit dem Attribut Language gleich de, das irgendwo unterhalb des Elementes CARTECInfo mit dem Attribut Code gleich 1 vorkommt.

                                                                Deine Und-Verknüpfung bräuchtest du ja nur dann, wenn Du das CARTECInfo mit Code=1 _und_ Quantity=2 auslesen willst. Soweit ich weiß gehen aber auch logische Verknüpfungen dieser Art, fragst sich nur wie.

                                                                zB. //aaa|bbb gibt dir wohl alle Element <aaa> und <bbb> in der Nodelist zurück.

                                                                Dank und Gruß,

                                                                frankx

                                                                --
                                                                tryin to multitain  - Globus = Planet != Welt
                                                                1. ungetestet:

                                                                  //irgendwas:CARTECInfo[@Code=1]//irgendwas::Text[@Language=de]

                                                                  Das Element mit dem Attribut Language gleich de, das irgendwo unterhalb des Elementes CARTECInfo mit dem Attribut Code gleich 1 vorkommt.

                                                                  Deine Und-Verknüpfung bräuchtest du ja nur dann, wenn Du das CARTECInfo mit Code=1 _und_ Quantity=2 auslesen willst. Soweit ich weiß gehen aber auch logische Verknüpfungen dieser Art, fragst sich nur wie.

                                                                  zB. //aaa|bbb gibt dir wohl alle Element <aaa> und <bbb> in der Nodelist zurück.

                                                                  Dank und Gruß,

                                                                  frankx

                                                                  Moinsen,
                                                                  habe es mal ausprobiert:

                                                                  $query_string="//irgendwas:CARTECInfo[@Code=1]//irgendwas::Text[Language=de];
                                                                  $node_list = $xml->xpath($query_string);

                                                                  echo $node_list[0]["Text"];
                                                                  var_dump($node_list);

                                                                  bekomme nur eine warnung:

                                                                  Warning: SimpleXMLElement::xpath() [function.SimpleXMLElement-xpath]: Invalid expression in /mein/root/example.php on line 40
                                                                  bool(false)

                                                                  line 40 wäre "$node_list = $xml->xpath($query_string);"

                                                                  1. Hallo zusammen,
                                                                    ich habe das auch mal getestet. Der Logik nach habe ich es mir so vorgestellt:

                                                                    $query_string="//irgendwas:CARTECInfo[@Code=1]/Text[Language=de]";
                                                                    $node_list = $xml->xpath($query_string);

                                                                    echo $node_list[0]["Text"];
                                                                    var_dump($node_list);

                                                                    als Ausgabe erhalte ich aber nur "array(0) { } "

                                                                    Bin gespannt ;-)

                                                                    1. Hellihello

                                                                      das "@" muss schon da stehen vor Language. Und wenn der Wert keine Zahl ist, dann müssen da wohl noch Hochkommas rein. Den Namespace hab ich jetzt hierfür mal außen vor gelassen:

                                                                        
                                                                        
                                                                      <?php  
                                                                        
                                                                      $xml_string =  
                                                                      '<?xml version="1.0" ?>  
                                                                      <CategoryCodes>  
                                                                      <CARTECInfo Code="35" Quantity="2">  
                                                                        <Description>  
                                                                        <Text Language="en">aa</Text>  
                                                                        <Text Language="de">cc</Text>  
                                                                        </Description>  
                                                                      </CARTECInfo>  
                                                                      <CARTECInfo Code="1" Quantity="2">  
                                                                       <Description>  
                                                                        <Text Language="en">gg</Text>  
                                                                        <Text Language="de">jj</Text>  
                                                                        </Description>  
                                                                        </CARTECInfo>  
                                                                       </CategoryCodes>  
                                                                      ';  
                                                                        
                                                                      $simple_xml = simplexml_load_string($xml_string);  
                                                                      $query_string="//CARTECInfo[@Code=1]//Text[@Language='de']";  
                                                                      $node_list = $simple_xml->xpath($query_string);  
                                                                      var_dump($node_list);  
                                                                        
                                                                        
                                                                      
                                                                      

                                                                      ich habe das auch mal getestet. Der Logik nach habe ich es mir so vorgestellt:

                                                                      $query_string="//irgendwas:CARTECInfo[@Code=1]/Text[Language=de]";
                                                                      $node_list = $xml->xpath($query_string);

                                                                      Das würde auch nur auf einen <Text> als direktes Kind von CARTEC... matchen, mal abgesehen von den anderen o.g. fehlenden Teilen.

                                                                      Dank und Gruß,

                                                                      frankx

                                                                      --
                                                                      tryin to multitain  - Globus = Planet != Welt
                                                                      1. Spitze-das klappt! ;-)
                                                                        Jetzt sitze ich wieder an einem anderen Problem welches ich nicht verstehe.
                                                                        Die XML ist ja UTF-8 codiert. Umlaute stehen also als ü ä ö in der XML.

                                                                        In meiner PHP-Datei habe ich den header auch unf UTF-8 gestellt.
                                                                        header('content-type: text/html; charset=utf-8');

                                                                        Nun habe ich mit den hier behandelten Funktionen den Text "Männer" in der Variable $info. Die möglichen Umlaute in diese Variablen möchte ich umschreiben:

                                                                        z.B.:
                                                                        $info= str_replace('ä', "ae", $info);

                                                                        echo $info; // Ausgabe trotzem "Männer" und nicht "Maenner"

                                                                        Ich habe auch versucht eine funktion auf die gesamte Variable "$simple_xml"
                                                                        anzuwenden-auch erfolglos.

                                                                        function germanChars(&$Array) {
                                                                            $chars = array("ä" => "ae", "ö" => "oe", "ü" => "ue", "Ä" => "Ae", "Ö" => "Oe", "Ü" => "Ue", "ß" => "ss");
                                                                            foreach($Array as $a => $b) {
                                                                                foreach($chars as $i => $j) $Array[$a] = str_replace($i,$j,$Array[$a]);
                                                                            }
                                                                            return $Array;
                                                                        }

                                                                        germanChars($simple_xml);

                                                                        Hat jemand einen ansatz? Auf einer "$_POST" funktioniert das ja alles tadellos...

                                                                        Grüsse

                                                                        1. Hellihello

                                                                          $info= str_replace('ä', "ae", $info);

                                                                          gibts nicht auch htmlentities()?

                                                                          vielleicht ist dein "ä", was du zum Suchen angibst, nicht so kodiert wie das "ä", was Du suchst?

                                                                          echo $info; // Ausgabe trotzem "Männer" und nicht "Maenner"

                                                                          Ich habe auch versucht eine funktion auf die gesamte Variable "$simple_xml"
                                                                          anzuwenden-auch erfolglos.

                                                                          function germanChars(&$Array) {
                                                                              $chars = array("ä" => "ae", "ö" => "oe", "ü" => "ue", "Ä" => "Ae", "Ö" => "Oe", "Ü" => "Ue", "ß" => "ss");
                                                                              foreach($Array as $a => $b) {
                                                                                  foreach($chars as $i => $j) $Array[$a] = str_replace($i,$j,$Array[$a]);
                                                                              }
                                                                              return $Array;
                                                                          }

                                                                          germanChars($simple_xml);

                                                                          Hat jemand einen ansatz? Auf einer "$_POST" funktioniert das ja alles tadellos...

                                                                          Was meint "auf einer _post?". Und was klappt da?

                                                                          Dank und Gruß,

                                                                          frankx

                                                                          --
                                                                          tryin to multitain  - Globus = Planet != Welt
                                                                          1. Hallo,
                                                                            im Quelltext steht bei mir das "ä". Wenn ich es in meine Datenbank schreibe steht es dort als "ä".

                                                                            Die Funktion habe ich vor dem Insert in eine DB installiert-in einem anderen Script. Bevor die Daten aus einem Form in meine DB eingetragen werden wird die Funktion aufgerufen "germanChars($_POST);".
                                                                            Gibt jemand "Männer" im Form an wird "Maenner" in die DB eingetragen...

                                                                            1. Hellihello

                                                                              Hallo,
                                                                              im Quelltext steht bei mir das "ä". Wenn ich es in meine Datenbank schreibe steht es dort als "ä".

                                                                              Jau, da steht ein utf-8 kodiertes "ä" was mit iso-8859-1 angezeigt wird. Wenn Du zB. mit phpMyAdmin in Deine Datenbank schaust, und diese Seite eben iso-8859-1 -kodiert angezeigt wird, siehst Du das eben wie o.g.

                                                                              Die Funktion habe ich vor dem Insert in eine DB installiert-in einem anderen Script. Bevor die Daten aus einem Form in meine DB eingetragen werden wird die Funktion aufgerufen "germanChars($_POST);".
                                                                              Gibt jemand "Männer" im Form an wird "Maenner" in die DB eingetragen...

                                                                              Äh, klappt es nun oder klappt es nicht. Mir ist nicht klar, in welchem Zusammenhang es nicht funktioniert. Eine Fehlerquelle: der Editor, indem das Script geschrieben ist, kodiert Latin-1/iso-8859-1/8 Bit.

                                                                              Dank und Gruß,

                                                                              frankx

                                                                              --
                                                                              tryin to multitain  - Globus = Planet != Welt
                                                                              1. Jetzt verwirre ich komplett.
                                                                                Wie mache ich denn in meinem PHP-Script (wenn ich mit echo augebe) aus dem "ä" bzw. "ä" ein "ae" oder ein "(&)auml;"?

                                                                                Die Funktion klappt wenn die Daten aus einem Form kommen-nicht bei diesem Script mit den XML-Daten.

                                                                                1. Hellihello

                                                                                  Jetzt verwirre ich komplett.
                                                                                  Wie mache ich denn in meinem PHP-Script (wenn ich mit echo augebe) aus dem "ä" bzw. "ä" ein "ae" oder ein "(&)auml;"?

                                                                                  Die Funktion klappt wenn die Daten aus einem Form kommen-nicht bei diesem Script mit den XML-Daten.

                                                                                  Dass heißt ja dann, dass die Funktion funktioniert, erstmal. Wenn Du XML-Daten ausließt, dann ist _alles_ erstmal ein "Knoten" und Du musst das u.U. "casten" (?) mit (string).

                                                                                  Dank und Gruß,

                                                                                  frankx

                                                                                  --
                                                                                  tryin to multitain  - Globus = Planet != Welt
                                                                                  1. Upps! weiss (noch) nicht was das bedeuten soll-aber ich werde es heraus finden-hoffe ich ;-)

                                                                                    mich wundert nur das "$info= str_replace('ä', "ae", $info);" nicht klappt weil das "ä" ja nicht als "ä" ankommt...

                                                                                    1. Hellihello

                                                                                      Upps! weiss (noch) nicht was das bedeuten soll-aber ich werde es heraus finden-hoffe ich ;-)

                                                                                        
                                                                                        
                                                                                      <?php  
                                                                                      $xml = '<?xml version="1.0"?><root><element>textänode</element></root>';  
                                                                                      $sx = simplexml_load_string($xml);  
                                                                                      $replaced = str_replace("text","neuertext",$sx->element);  
                                                                                      var_dump( $replaced);  
                                                                                        
                                                                                      
                                                                                      

                                                                                      geht bei mir. vielleicht hilft Dir utf8_encode() an irgendeiner Stelle weiter.

                                                                                      mich wundert nur das "$info= str_replace('ä', "ae", $info);" nicht klappt weil das "ä" ja nicht als "ä" ankommt...

                                                                                      Das eine ist eben ein utf-8 - ä und das andere ein Latin1-ä. Und das sind verschiedene Hex-Codes.

                                                                                      Dank und Gruß,

                                                                                      frankx

                                                                                      --
                                                                                      tryin to multitain  - Globus = Planet != Welt
                                                                                      1. Hallo,
                                                                                        na da stand ich ja jetzt auf dem Schlauch-driss umlaute... ;-)
                                                                                        Habe aber mal ne andere Frage:

                                                                                        Wie kann ich Daten in einer Art "Schleife" ausgeben?
                                                                                        Also in diesem Beispiel jedes "CARTECInfo" wo "Text Language="de"" ist => im Beispiel also "cc" und "jj" - bestenfalls mit Koma getrennt...

                                                                                        <?php

                                                                                        $xml_string =
                                                                                        '<?xml version="1.0" ?>
                                                                                        <CategoryCodes>
                                                                                        <CARTECInfo Code="35" Quantity="2">
                                                                                          <Description>
                                                                                          <Text Language="en">aa</Text>
                                                                                          <Text Language="de">cc</Text>
                                                                                          </Description>
                                                                                        </CARTECInfo>
                                                                                        <CARTECInfo Code="1" Quantity="2">
                                                                                         <Description>
                                                                                          <Text Language="en">gg</Text>
                                                                                          <Text Language="de">jj</Text>
                                                                                          </Description>
                                                                                          </CARTECInfo>
                                                                                         </CategoryCodes>
                                                                                        ';

                                                                                        $simple_xml = simplexml_load_string($xml_string);
                                                                                        $query_string="//CARTECInfo//Text[@Language='de']";
                                                                                        $node_list = $simple_xml->xpath($query_string);

                                                                                        $ausgabe = $node_list[0]; //gibt mir nur den ersten Text aus

                                                                                        Viele Grüsse

                                                                                        1. Hellihello

                                                                                          Hallo,
                                                                                          Wie kann ich Daten in einer Art "Schleife" ausgeben?

                                                                                          schonmal mit "foreach" gearbeitet?

                                                                                          foreach ($node_list as $key -> $node) {
                                                                                           var_dump($key);
                                                                                           var_dump($node);
                                                                                           echo $key;
                                                                                           echo $node;
                                                                                           echo $node["Quantity"];
                                                                                          }

                                                                                          So in der Art, ungetestet.

                                                                                          Dank und Gruß,

                                                                                          frankx

                                                                                          --
                                                                                          tryin to multitain  - Globus = Planet != Welt
                                                                                          1. Hellihello

                                                                                            Hallo,
                                                                                            Wie kann ich Daten in einer Art "Schleife" ausgeben?

                                                                                            schonmal mit "foreach" gearbeitet?

                                                                                            foreach ($node_list as $key -> $node) {
                                                                                            var_dump($key);
                                                                                            var_dump($node);
                                                                                            echo $key;
                                                                                            echo $node;
                                                                                            echo $node["Quantity"];
                                                                                            }

                                                                                            So in der Art, ungetestet.

                                                                                            Dank und Gruß,

                                                                                            frankx

                                                                                            HAllo,
                                                                                            habe schon mit foreach gearbeitet, komme nur hier nicht so recht weiter.

                                                                                            foreach($node_list as $key ->$node) { //$key ->$node ergibt den Fehler "Fatal error: Cannot access empty property"

                                                                                            foreach($node_list as $key ->node) {
                                                                                             var_dump($key); //gibt den ersten Eintrag aus
                                                                                             var_dump($node);
                                                                                             echo $key;
                                                                                             echo $node;
                                                                                             echo $node["Quantity"];
                                                                                            }

                                                                                            1. Hellihello

                                                                                              foreach($node_list as $key ->$node)

                                                                                              "=>"!

                                                                                              Dank und Gruß,

                                                                                              frankx

                                                                                              --
                                                                                              tryin to multitain  - Globus = Planet != Welt
                                                                                              1. Hellihello

                                                                                                foreach($node_list as $key ->$node)

                                                                                                "=>"!

                                                                                                Dank und Gruß,

                                                                                                frankx

                                                                                                Danke-es kann manchmal soo einfach sein ;-)
                                                                                                Aber meine Ausgabe will noch immer nicht so wie ich es möchte:

                                                                                                foreach($node_list as $key=$node) {
                                                                                                $xy = $node["Quantity"]", ";
                                                                                                }

                                                                                                echo $xy;

                                                                                                Auch ohne das ", " bekomme ich "$node["Quantity"];" nicht in eine var gespeicher...

                                                                                                1. Hellihello

                                                                                                  foreach($node_list as $key ->$node)

                                                                                                  "=>"!

                                                                                                  Dank und Gruß,

                                                                                                  frankx

                                                                                                  Danke-es kann manchmal soo einfach sein ;-)
                                                                                                  Aber meine Ausgabe will noch immer nicht so wie ich es möchte:

                                                                                                  foreach($node_list as $key=$node) {
                                                                                                  $xy = $node["Quantity"]", ";
                                                                                                  }

                                                                                                  echo $xy;

                                                                                                  Auch ohne das ", " bekomme ich "$node["Quantity"];" nicht in eine var gespeicher...

                                                                                                  Ich depp! Hat sich erledigt...

                                                                          2. Moinsen,
                                                                            zu diesem Thema habe ich auch mal eine Frage:
                                                                            Wie kann ich denn z.b. Sonderzeichen (ein Hochkomma ' ) ersetzen?
                                                                            Ich habe eine externe XML in der jemand "Steffen's" geschrieben hat. Möchte ich diese var in meine Datenbank schreiben kommt es zum Fehler - logisch.

                                                                            Jetzt möchte ich aber nicht jede einzelne var umschreiben ($CarName= str_replace(''', "", $CarName);) sonder auf alles im XML anwenden.

                                                                            Wie ist das zu lösen?
                                                                            Habe es so versucht:

                                                                            $xml = simplexml_load_file($query);
                                                                            $xml= str_replace(''', "", $xml);

                                                                            Das klappt so aber leider nicht...

                                                                            Schönes Wochenende

                                                                            1. Hellihello

                                                                              Moinsen,
                                                                              zu diesem Thema habe ich auch mal eine Frage:
                                                                              Wie kann ich denn z.b. Sonderzeichen (ein Hochkomma ' ) ersetzen?

                                                                              Nun, zum Verständnis vielleicht: im XML-Dokument sind alles Knoten. Auch die Textinhalte sind Textknoten. Willst Du daraus einen string machen, musst Du sie "casten" ((string)$textknoten)).

                                                                              Ich habe eine externe XML in der jemand "Steffen's" geschrieben hat. Möchte ich diese var in meine Datenbank schreiben kommt es zum Fehler - logisch.

                                                                              Warum ist das logisch? Das Thema hat ja eigentlich nix mit XML zu tun, oder? Meine Erfahrungen mit SQL-Datenbanken sind eher marginaler Natur, aber Du musst doch einfach nur kontextspezifisch kodieren/escapen, oder?

                                                                              Jetzt möchte ich aber nicht jede einzelne var umschreiben ($CarName= str_replace(''', "", $CarName);) sonder auf alles im XML anwenden.

                                                                              Wie ist das zu lösen?
                                                                              Habe es so versucht:

                                                                              $xml = simplexml_load_file($query);
                                                                              $xml= str_replace(''', "", $xml);

                                                                              Das klappt so aber leider nicht...

                                                                              Vergiß nicht, dass die Datei im Grunde ein einziger String ist.

                                                                              $xml_as_string = file_get_contents($xml_file_name);

                                                                              Ersetzen und Abspeichern, wäre aber (s.o.) vermutlich nicht die "korrekte" Variante.

                                                                              Dank und Gruß,

                                                                              frankx

                                                                              --
                                                                              tryin to multitain  - Globus = Planet != Welt