0

次のメソッドを使用して Web サービス データを取得します。

$client = new SoapClient("http://empblr.dyndns.org/CentralHomeDelivery_Mob/Service.asmx?wsdl");


     $result = $client->GetAlladdress(array('customerid'=>36));

$result を var_dump すると、

object(stdClass)[16]
  public 'GetAlladdressResult' => 
    object(stdClass)[17]
      public 'schema' => string '<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet"><xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"><xs:complexType><xs:choice minOccurs="0" maxOccurs="unbounded"><xs:element name="Table"><xs:complexType><xs:sequence><xs:element name="AdressID" type="xs:int" minOccurs="0"/><xs:element name="CustomerID" type="xs:int" minOccurs="0"/><xs:element name="LocationID" type="xs:int" minOccurs="0"/><xs'... (length=1030)
      public 'any' => string '<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"><NewDataSet xmlns=""><Table diffgr:id="Table1" msdata:rowOrder="0"><AdressID>643</AdressID><CustomerID>36</CustomerID><LocationID>176</LocationID><StreetName>asdf</StreetName><HouseNo>1234</HouseNo><AlternatePhone>5632256</AlternatePhone><LandMark>asdf </LandMark><MainLocID>2</MainLocID><locName>ANDOLANA CIRCLE</locName><MainLoc>Mysore    </MainLoc></Table><Table diffgr:id="Table2" m'... (length=1864)

子ノードから値を取得して配列に格納するにはどうすればよいです<CustomerID>か??

ありがとうございました..

4

2 に答える 2

3

通常、WSDL モードの場合は、これらの値を標準クラス プロパティとしてSoapClient提供するオブジェクトを提供する必要があります。stdClass

そうでない場合 (var_dumpカットオフであるため、質問からは明らかではありません) any、たとえばSimpleXMLparserを使用して、プロパティにある XML を解析できます。

コード例 (オンラインデモ):

$xml = new SimpleXMLElement($result->GetAlladdressResult->any);

# traversal
$table = $xml->NewDataSet->Table[0];
echo $table->LocationID, "\n", $table->MainLoc, "\n";

# xpath
echo $xml->xpath('//LocationID')[0], "\n", $xml->xpath('//MainLoc')[0], "\n";

これは、データにアクセスする 2 つの代替方法を示しています。1 つ目は標準的なトラバーサルによるもので、2 つ目xpath()は xpath クエリを実行する方法によるものです。

于 2013-03-06T05:03:23.630 に答える
0

いつでも正規表現を使用できます。

preg_match('#<CustomerID>(\d+)</CustomerID>#', $result->GetAlladdressResult->any, $match);
$customerId = isset($match[1]) ? $match[1] : false;
于 2013-03-05T19:03:16.077 に答える