2017-09-29 14 views
0

私はgugで受け取ったレスポンスをpreg_matchしようとしています。 問題は、コンテンツを私のに入力したときです。everything_in_tags関数peg_match関数は結果を返しません。 everything_in_tags機能に手動でpreg_matchとguzzleレスポンスの問題

するpreg_match関数は、私がときのvar_dump(の$ this - >ボディ)の内容をコピー&ペーストなどaspected作品

キャスト後、$ this-> bodyは文字列オブジェクトです。

だから、なぜそれがそのように振る舞い、誰かがとても親切で、私がその問題を解決する方法を教えてくれるのだろうかと疑問に思う。

Thxです。

コード:文字列として

public function __construct() { 
    $this->dataRaw = (object) []; 
    $this->client = new GuzzleHttp\Client(); 
    $this->res = $this->client->request('GET', 'https://www- genesis.destatis.de/genesisWS/web/ExportService_2010?method=TabellenExport&kennung=kennung&passwort=password&namen=13321-0001&bereich=Alle&format=html&strukturinformation=false&komprimieren=true&transponieren=true&startjahr=2016&endjahr=2017&zeitscheiben=&regionalmerkmal=&regionalschluessel=&sachmerkmal=FAMSTD&sachschluessel=VERH&sachmerkmal2=&sachschluessel2=&sachmerkmal3=&sachschluessel3=&stand=&auftrag=false&sprache=de'); 

    $this->body = (string) $this->res->getBody()->getContents(); 
    $this->dom = new Dom; 

    var_dump($this->body); 


    $this->table = $this->everything_in_tags($this->body, 'table', false); 

    $this->dom->loadStr($this->table , []); 
    $this->html = $this->dom->outerHtml; 
} 

function everything_in_tags($string, $tagname, $inner) { 
    $pattern = "#<\s*?$tagname\b[^>]*>(.*?)</$tagname\b[^>]*>#s"; 
    preg_match($pattern, $string, $matches); 
    return $matches[$inner ? 1 : 0]; 
} 

がつがつ食う-応答:

 200text/xml;charset=ISO-8859-11Bei mindestens einem Objekt sind Fehler  oder Warnungen aufgetreten.Information13321-000122Mindestens ein Parameter enthält ungültige Werte. Er wurde angepasst, um den Service starten zu können.: zeitscheibenWarnungAktualisierte 
 
Daten28.09.201713321-000109:21:273888 3114 9999674 falseKNZPT13false falseERW0024falseErwerbstätige3Wfalsefalse falseERW1235falseVeränderungsrate zum Vormonat3Wfalsefalse falseERW1246falseVeränderungsrate zum  Vorjahresmonat3WfalsefalseInlands-/ Inländerkonzept0SKfalsefalseTemporär 
 
false133211false falseDINSG2falseDeutschland insgesamt1RKfalsefalseErwerbstätigenrechnung in der VGR (national)0Efalsefalse8925 falseJAHR8false falseMONAT9falseMonate8ZKfalsefalseJahr0ZIfalsefalse falseWERTE17falseWerte0SKfalsefalse 
 
<?xml version="1.0" encoding="utf-8" standalone="no"?> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml"> 
 

 
<head> 
 
    <title>GENESIS-Tabelle: Tempor&#228;r</title> 
 
</head> 
 

 
<body> 
 
    <table border="1" summary="Die Tabelle Tempor&#228;r enth&#228;lt aktuelle Daten zur Statistik - Erwerbst&#228;tigenrechnung in der VGR (national) - mit Stand vom 28.09.2017 "> 
 
    <caption>Erwerbst&#228;tige (inkl. Ver&#228;nderungsraten): Deutschland,<br />Monate, Inlands-/Inl&#228;nderkonzept, original/saisonbereinigte<br />Werte</caption> 
 
    <thead> 
 
     <tr> 
 
     <th id="Z4S1" colspan="8" align="left">Erwerbst&#228;tigenrechnung in der VGR (national)<br />Deutschland</th> 
 
     </tr> 
 
    </thead> 
 
    <tbody>  
 
    </tbody> 
 
    </table> 
 
    <p></p> 
 
    <div class="copyright">&#169; Statistisches Bundesamt (Destatis), 2017 &#160;&#124; Stand: 28.09.2017/09:21:27</div> 
 
    </body> 
 

 
    </html>Alle13321-0001false2017htmlfalseFAMSTDdetruefalse0

答えて

0

私は仮定の文字列が実際に出力されるよう、あなたは、レスポンスをがつがつ食うということあなたのブラウザはどんなものでしょうか?あなたがページを呼び出したときに、あなたのことを。

これが正しい場合は、そのURLから返される内容がわからない可能性が非常に高いです。何が返されることは、この(またはリモートで似たような)のように、XMLを含むXMLのいくつかの種類である:

<soapenv:Envelope><soapenv:Body>[content]</soapenv:Body></soapenv:Envelope> 

しかし、あなたが目指しているコンテンツは、最も可能性の高いHTMLエスケープ、という意味である:あなたが見る<table>タグはコンテンツでマークアップではないため、ブラウザの出力に実際には&lt;table&gt;です。

私からのアドバイスです:ブラウザ(右クリック:ビューのソースコードまたは何でも)での実際のソースコードで

  1. 見て、あなたのがつがつ食う応答あなたが出力するとき、それはあなたが提供されるよりも多くの出力が含まれている必要があります。
  2. soap-envelope内のコンテンツを検索するためにxml-parser(またはsoap parser、またはこれが実際にrpcかどうかわからないパーサー)を使用し、xmlパーサーを使用してそのコンテンツを解析します。

これで十分です。しかし、私は間違っているかもしれません。

関連する問題