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);

但不知道如何继续阅读TitleAuthor其他信息。非常感谢您提供的任何帮助。

4

2 回答 2

1

对于您的特定情况,您可以使用 SOAP 客户端getTypes ()来获取结构,然后设计代码来处理从 doRequest()方法返回的字符串。

我想,您不应该根据序列化的 XML 数据来处理来自 Web 服务的响应。相反,使用标准 API 对其进行包装,并将其视为调用 API 功能调用。并处理返回数据而不是处理整个 HTTP 数据包数据。

这些资源可能会有所帮助。请参阅此IBM 教程以及PHP Soap 客户端手册

于 2013-02-18T10:00:11.233 回答
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 回答