0

あまりにも多くの投稿を調べた後でも、PHP でこの XML を解析する方法が見つかりませんでした。

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <SingleResponse xmlns="http://content.host.com">
         <ContentCafe DateTime="2013-02-18T04:31:16.1619171-05:00">
            <RequestItems UserID="abcdefg" Password="hijklmnop">
               <RequestItem>
                  <Key Type="ISBN" Original="9780002571838">9780002571838</Key>
                  <Content>ProductDetail</Content>
                  <ProductItems>
                     <ProductItem ID="8714731">
                        <ISBN>9780002571838</ISBN>
                        <Title>Memoirs</Title>
                        <Author>Rees-Mogg, William</Author>
                        <Source Code="BTB">B&amp;T Books</Source>
                        <Product Code="BOOK">Book</Product>
                        <Supplier Code="HARPE">HarperCollins</Supplier>
                     </ProductItem>
                  </ProductItems>
               </RequestItem>
            </RequestItems>
         </ContentCafe>
      </SingleResponse>
   </soap:Body>
</soap:Envelope>

私はこの時点まで来ました:

$xml = new SimpleXMLElement($xml);

Titleしかし、Authorやその他の情報をさらに読み進める方法がわかりません。あなたが提供できる助けを大いに感謝します。

4

2 に答える 2

1

次のように実行できます。

デモ

$obj = new SimpleXMLElement($xml);

$item = $obj->children('http://schemas.xmlsoap.org/soap/envelope/')->children()->SingleResponse->ContentCafe->RequestItems->RequestItem->ProductItems->ProductItem;

echo $item->Title . "\n";
echo $item->Author . "\n";
echo $item->attributes()->ID;

出力

回想録
リース・モッグ、ウィリアム
8714731

複数ある<ProductItem>場合は、私が行ったように直接アクセスするのではなく、それらをループする必要があります。

于 2013-02-18T10:05:07.007 に答える
1

特定のケースでは、 SOAP クライアントgetTypes ()を使用して構造体を取得し、 doRequest()メソッドから返された文字列を処理するコードを設計できます。

シリアル化された XML データの観点から、Web サービスからの応答を処理するべきではないと思います。代わりに、標準 API を使用してラップし、API 機能呼び出しを呼び出していると見なしてください。また、HTTP パケット データ全体を処理するのではなく、戻りデータを処理します。

これらのリソースが役立つ場合があります。このIBM のチュートリアルPHP Soap Client Manualも参照してください。

于 2013-02-18T10:00:11.233 に答える