Ankündigung

Einklappen
Keine Ankündigung bisher.

Wert aus XML-RPC darstellen

Einklappen

Neue Werbung 2019

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

  • Wert aus XML-RPC darstellen

    Hallo. Ich benutze das folgende Skript für eine Abfrage der Ust-ID
    PHP-Code:
    <?php
    $data 
    = array(
        
    'UstId_1'=>'DE118519999',
        
    'UstId_2'=>'GB284522102',
        
    'Firmenname'=>'AniCuray',
        
    'Ort'=>'Eindhoven',
        
    'PLZ'=>'5800AD',
        
    'Strasse'=>'POBox142',
        
    'Druck'=>'ja' 
    ); 

    $string http_build_query($data'&'); 
    $antwort urlRequest('https://evatr.bff-online.de/evatrRPC''Mozilla/5.0 (X11; Ubuntu; Linux x86; rv:28.0) Gecko/20100101 Firefox/28.0'true''$string);
    function 
    urlRequest($url$setUserAgent=false$usePost=false$additionalHeaders=''$content='') {
        return 
    file_get_contents($urlfalsestream_context_create(array('http' => array('method' => (($usePost) ? 'POST' 'GET'), 'header' => "User-Agent: ".(($setUserAgent) ? $setUserAgent $_SERVER['HTTP_USER_AGENT'])."\r\n"."Content-Type: application/x-www-form-urlencoded;charset=UTF-8\r\n".$additionalHeaders'content' => $content))));
    }
    echo 
    $antwort
    ?>
    Zurück bekomme ich - wenn ich $antwort ausgebe und im Quellcode gucke - so eine XML:
    HTML-Code:
    <params>
    <param>
    <value><array><data>
    <value><string>UstId_1</string></value>
    <value><string>DE118519999</string></value>
    </data></array></value>
    </param>
    <param>
    <value><array><data>
    <value><string>ErrorCode</string></value>
    <value><string>200</string></value>
    </data></array></value>
    </param>
    <param>
    <value><array><data>
    <value><string>UstId_2</string></value>
    <value><string>GB284522102</string></value>
    </data></array></value>
    </param>
    .......
    Ich habe das hier probiert:
    PHP-Code:
    $xml simplexml_load_string($antwort);
    $json json_encode($xml);
    #$array = json_decode($json,TRUE);
    #echo $json;
    #echo '<hr><br>';
    print_r(json_decode($json));
    $namen_objekt json_decode($json);
    echo 
    $namen_objekt->{'data'}; 
    Das Ergebnis ist für mich aber nicht wirklich schlüssig...

    Wie kann ich die "strukturiert" und "schön" ausgeben? Könnt Ihr mir mit einem Ansatz helfen?

    Dankeschön!!
    Beste Grüße

  • #2
    Du solltest erstmal die Antwort durch ein XML-Formatter jagen um zu sehen, was da kommt:
    PHP-Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <params>
       <param>
          <value>
             <array>
                <data>
                   <value>
                      <string>UstId_1</string>
                   </value>
                   <value>
                      <string>DE118519999</string>
                   </value>
                </data>
             </array>
          </value>
       </param>
       <param>
          <value>
             <array>
                <data>
                   <value>
                      <string>ErrorCode</string>
                   </value>
                   <value>
                      <string>200</string>
                   </value>
                </data>
             </array>
          </value>
       </param>
       <param>
          <value>
             <array>
                <data>
                   <value>
                      <string>UstId_2</string>
                   </value>
                   <value>
                      <string>GB284522102</string>
                   </value>
                </data>
             </array>
          </value>
       </param>
    </params>
    Am Rande: Wer denkt sich solche Strukturen aus ?
    Der Umweg über das JSON hilft dir auch nicht viel. Du kannst dir die Werte über SimpleXML/XPpath holen.

    Alternativ kannst du es auch mit einer fertigen Klasse probieren:
    PHP-Code:
    $tabArr tableArray::createFromXML($xml)
      ->
    flatten()  
      ->
    SELECT('
         value.array.data.value.0.string AS value0,
         value.array.data.value.1.string AS value1'
    )
      ->
    fetchAll()

    Das Ergebnis ist ein Array der Form:
    PHP-Code:
    array (
      
    => 
      array (
        
    'value0' => "UstId_1",
        
    'value1' => "DE118519999",
      ),
      
    => 
      array (
        
    'value0' => "ErrorCode",
        
    'value1' => "200",
      ),
      
    => 
      array (
        
    'value0' => "UstId_2",
        
    'value1' => "GB284522102",
      ),

    LG jspit

    Kommentar


    • #3
      Wie kann ich die "strukturiert" und "schön" ausgeben? Könnt Ihr mir mit einem Ansatz helfen?
      Das heißt was? Und was hättest du denn gerne? Im Grunde kannst du ja alles ausprogrammieren, was du gerne möchtest.

      PHP-Code:
      $s = <<<XML
      <params>
          <param>
              <value>
                  <array>
                      <data>
                          <value>
                              <string>UstId_1</string>
                          </value>
                          <value>
                              <string>DE118519999</string>
                          </value>
                      </data>
                  </array>
              </value>
          </param>
          <param>
              <value>
                  <array>
                      <data>
                          <value>
                              <string>ErrorCode</string>
                          </value>
                          <value>
                              <string>200</string>
                          </value>
                      </data>
                  </array>
              </value>
          </param>
          <param>
              <value>
                  <array>
                      <data>
                          <value>
                              <string>UstId_2</string>
                          </value>
                          <value>
                              <string>GB284522102</string>
                          </value>
                      </data>
                  </array>
              </value>
          </param>
      </params>
      XML;

      $xml simplexml_load_string($s);
      $json json_encode($xmlJSON_PRETTY_PRINT);

      var_dump($json); 
      Code:
       string(1352) "{
          "param": [
              {
                  "value": {
                      "array": {
                          "data": {
                              "value": [
                                  {
                                      "string": "UstId_1"
                                  },
                                  {
                                      "string": "DE118519999"
                                  }
                              ]
                          }
                      }
                  }
              },
              {
                  "value": {
                      "array": {
                          "data": {
                              "value": [
                                  {
                                      "string": "ErrorCode"
                                  },
                                  {
                                      "string": "200"
                                  }
                              ]
                          }
                      }
                  }
              },
              {
                  "value": {
                      "array": {
                          "data": {
                              "value": [
                                  {
                                      "string": "UstId_2"
                                  },
                                  {
                                      "string": "GB284522102"
                                  }
                              ]
                          }
                      }
                  }
              }
          ]
      }"
      oder als PHP-Array

      Code:
      $a = json_decode($json, true);
      
      array(1) {
        ["param"]=>
        array(3) {
          [0]=>
          array(1) {
            ["value"]=>
            array(1) {
              ["array"]=>
              array(1) {
                ["data"]=>
                array(1) {
                  ["value"]=>
                  array(2) {
                    [0]=>
                    array(1) {
                      ["string"]=>
                      string(7) "UstId_1"
                    }
                    [1]=>
                    array(1) {
                      ["string"]=>
                      string(11) "DE118519999"
                    }
                  }
                }
              }
            }
          }
          [1]=>
          array(1) {
            ["value"]=>
            array(1) {
              ["array"]=>
              array(1) {
                ["data"]=>
                array(1) {
                  ["value"]=>
                  array(2) {
                    [0]=>
                    array(1) {
                      ["string"]=>
                      string(9) "ErrorCode"
                    }
                    [1]=>
                    array(1) {
                      ["string"]=>
                      string(3) "200"
                    }
                  }
                }
              }
            }
          }
          [2]=>
          array(1) {
            ["value"]=>
            array(1) {
              ["array"]=>
              array(1) {
                ["data"]=>
                array(1) {
                  ["value"]=>
                  array(2) {
                    [0]=>
                    array(1) {
                      ["string"]=>
                      string(7) "UstId_2"
                    }
                    [1]=>
                    array(1) {
                      ["string"]=>
                      string(11) "GB284522102"
                    }
                  }
                }
              }
            }
          }
        }
      }
      Und dann halt weiter bauen...

      MOD: Verschoben von PHP-Fortgeschritten
      The string "()()" is not palindrom but the String "())(" is.

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

      Kommentar


      • #4
        Wie kann ich die "strukturiert" und "schön" ausgeben? Könnt Ihr mir mit einem Ansatz helfen?
        einen Dom Baum strukturiert ausgeben, dazu nutzt man im allg. css.
        https://www2.informatik.hu-berlin.de...ellung/css.htm

        Kommentar


        • #5
          Zitat von jspit Beitrag anzeigen
          Du solltest erstmal die Antwort durch ein XML-Formatter jagen um zu sehen, was da kommt:
          PHP-Code:
          <?xml version="1.0" encoding="UTF-8"?>
          <params>
          <param>
          <value>
          <array>
          <data>
          <value>
          <string>UstId_1</string>
          </value>
          <value>
          <string>DE118519999</string>
          </value>
          </data>
          </array>
          </value>
          </param>
          <param>
          <value>
          <array>
          <data>
          <value>
          <string>ErrorCode</string>
          </value>
          <value>
          <string>200</string>
          </value>
          </data>
          </array>
          </value>
          </param>
          <param>
          <value>
          <array>
          <data>
          <value>
          <string>UstId_2</string>
          </value>
          <value>
          <string>GB284522102</string>
          </value>
          </data>
          </array>
          </value>
          </param>
          </params>
          Am Rande: Wer denkt sich solche Strukturen aus ?
          Der Umweg über das JSON hilft dir auch nicht viel. Du kannst dir die Werte über SimpleXML/XPpath holen.

          Alternativ kannst du es auch mit einer fertigen Klasse probieren:
          PHP-Code:
          $tabArr tableArray::createFromXML($xml)
          ->
          flatten()
          ->
          SELECT('
          value.array.data.value.0.string AS value0,
          value.array.data.value.1.string AS value1'
          )
          ->
          fetchAll()



          LG jspit
          Vielen Dank! Das würde mir schon weiterhelfen. Ich kriege aber hier den Fehler

          Code:
          Notice: Undefined index: value.array.data.value.1.string in C:\xampp\htdocs\tableArray.php on line 283
          In 283 steht das:
          PHP-Code:
          foreach($this->data as $keyData => $row){
                        
          $this->data[$keyData][$nameAs] = $row[$fieldName];
                      } 
          Noch eine Idee?

          Kommentar


          • #6
            Mit was für xml-Daten hast du das probiert? Ich mit dem Schnipsel welchen ich gepostet habe. Sind in deiner xml immer 2 string Einträge in jeden param-Segment enthalten?
            Die Klasse ist nur für regelmäßige tabellenartige Strukturen geeignet.

            Edit: Nimm auch mal das ->Select(..) raus. Du erhältst dann lange Schlüssel ala 'value.array.data.value.0.string'.

            Kommentar


            • #7
              Hallo und Danke. Ja - immer 2 string Einträge . Allerdings ist ab und zu einer leer
              Code:
               {                                 "string": "Gueltig_bis"                             },                             {                                 "string": {}                             }
              Statt
              Code:
               
               {                                 "string": "Strasse"                             },                             {                                 "string": "POBox142"                             }
              Kann das daran liegen?

              Kommentar


              • #8
                Ja. Nimm auch mal das ->Select(..) raus. Du erhältst dann lange Schlüssel ala 'value.array.data.value.0.string'. Must dann eben prüfen.

                Kommentar


                • #9
                  Ich bekomme jetzt sowas raus:
                  Code:
                   
                   string(7048) "{     "param": [         {             "value": {                 "array": {                     "data": {                         "value": [                             {                                 "string": "UstId_1"                             },                             {                                 "string": "DE118514042"                             }                         ]                     }                 }             }         },         {             "value": {                 "array": {                     "data": {                         "value": [                             {                                 "string": "ErrorCode"                             },                             {                                 "string": "200"                             }                         ]                     }                 }             }         },
                  Wie kann ich denn jetzt wohl auf die einzelnen Elemente zugreifen und "ordentlich" ausgeben? Also z.B. jeweils als Variable und dann in eine Tabelle damit?

                  Mit "Select" raus geht leider nichts...

                  Dankeschön!!

                  Kommentar


                  • #10
                    Kann deinen String nicht interpretieren. Wo holst du den her? Zeig mal bitte deinen aktuellen Stand (Code) bis zur Ausgabe deines Strings.

                    Edit: Ahne was
                    Mit "Select" raus geht leider nichts...
                    Das fetchAll() mus drin bleiben:
                    PHP-Code:
                    $tabArr tableArray::createFromXML($xml)
                      ->
                    flatten()  
                      ->
                    fetchAll()
                    ;  
                    debug::write($tbl); 
                    Da sollte dann so etwas
                    PHP-Code:
                    array (
                      
                    =>
                      array (
                        
                    'value.array.data.value.0.string' => "UstId_1",
                        
                    'value.array.data.value.1.string' => "DE118519999",
                      ),
                      
                    =>
                      array (
                        
                    'value.array.data.value.0.string' => "ErrorCode",
                        
                    'value.array.data.value.1.string' => "206",
                      ), 
                    angedeutet rauskommen.




                    Kommentar


                    • #11
                      webdream
                      Bitte formatiere deinen präsentierten Code derart, dass man nicht horizontal scrollen muss.
                      Es gibt dafür auch Webseiten die das für dich erledigen können, falls dein Editor oder IDE da schwächen aufweist.

                      Kommentar


                      • #12
                        Zitat von protestix Beitrag anzeigen
                        webdream
                        Bitte formatiere deinen präsentierten Code derart, dass man nicht horizontal scrollen muss.
                        solange sich welche die mühe machen und gewünschte lösungen präsentieren, wird sich da wohl nichts ändern.

                        Kommentar


                        • #13
                          Hallo @jspit,
                          besten Dank! Hier mal der gesamte Code:
                          PHP-Code:
                          <?php
                          header
                          ('Content-type: text/javascript');
                          require 
                          'tableArray.php';

                          $data = array(
                             
                          'UstId_1'=>'DE118519999',
                              
                          'UstId_2'=>'GB284522102',
                              
                          'Firmenname'=>'AniCuray',
                              
                          'Ort'=>'Eindhoven',
                              
                          'PLZ'=>'5800AD',
                              
                          'Strasse'=>'POBox142',
                              
                          'Druck'=>'ja' 
                          );

                          $string http_build_query($data'&');
                          $antwort urlRequest('https://evatr.bff-online.de/evatrRPC''Mozilla/5.0 (X11; Ubuntu; Linux x86; rv:28.0) Gecko/20100101 Firefox/28.0'true''$string);
                          function 
                          urlRequest($url$setUserAgent=false$usePost=false$additionalHeaders=''$content='') {
                              return 
                          file_get_contents($urlfalsestream_context_create(array('http' => array('method' => (($usePost) ? 'POST' 'GET'), 'header' => "User-Agent: ".(($setUserAgent) ? $setUserAgent $_SERVER['HTTP_USER_AGENT'])."\r\n"."Content-Type: application/x-www-form-urlencoded;charset=UTF-8\r\n".$additionalHeaders'content' => $content))));
                          }
                          echo 
                          $antwort;
                          //1. Versuch
                          $tabArr tableArray::createFromXML($antwort)
                            ->
                          flatten() 
                            ->
                          fetchAll()
                          ;
                          echo 
                          '<hr>';
                          //2. Versuch
                          $xml simplexml_load_string($antwort);
                          $json json_encode($xmlJSON_PRETTY_PRINT);
                          print_r ($json);
                          var_dump($json);
                          ?>

                          Kommentar


                          • #14
                            Du must schon mit $tabArr weiter arbeiten und nicht mit $antwort!
                            PHP-Code:
                            //..Anfang wie oben
                            $tabArr tableArray::createFromXML($antwort)
                              ->
                            flatten() 
                              ->
                            fetchAll()
                            ;

                            echo 
                            '<pre>'.var_export($tabArr,true).'</pre>'

                            Kommentar


                            • #15
                              PHP-Code:
                              function xmlrpc_send_request(string $url, array $arguments) {
                                  
                              $curl curl_init();
                                  
                              curl_setopt_array($curl, [
                                      
                              CURLOPT_RETURNTRANSFER => TRUE,
                                      
                              CURLOPT_URL => $url,
                                      
                              CURLOPT_POSTFIELDS => $arguments
                                  
                              ]);
                                  
                              $response curl_exec($curl);
                                  return 
                              xmlrpc_reformat_response($response);
                              }

                              function 
                              xmlrpc_reformat_response(string $response) {
                                  
                              $response strtr($response, [
                                      
                              '<value><array><data>' => '<value><array><data><value><array><data>',
                                      
                              '</data></array></value>' => '</data></array></value></data></array></value>',
                                  ]);
                                  
                              $response xmlrpc_decode($response);
                                  
                              $response array_column($response10);
                                  return 
                              $response;
                              }

                              $response xmlrpc_send_request('https://evatr.bff-online.de/evatrRPC', [
                                  
                              'UstId_1' => 'DE118519999',
                                  
                              'UstId_2' => 'GB284522102',
                                  
                              'Firmenname' => 'AniCuray',
                                  
                              'Ort' => 'Eindhoven',
                                  
                              'PLZ' => '5800AD',
                                  
                              'Strasse' => 'POBox142',
                                  
                              'Druck' => 'ja'
                              ]);

                              var_dump($response); 

                              Kommentar

                              Lädt...
                              X