即使经过太多帖子,我也找不到用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&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
和其他信息。非常感谢您提供的任何帮助。
答案 0 :(得分:1)
对于您的具体情况,您可以使用 SOAP Client getTypes ()
来获取结构,然后设计代码来处理从doRequest()
方法返回的字符串。
我想,你不应该在序列化的XML数据方面处理Web服务的响应。相反,使用标准API来包装它,并将其视为调用API函数调用。并处理返回数据而不是处理整个HTTP数据包数据。
这些资源可能有所帮助。请参阅此IBM's tutorial以及PHP Soap Client Manual
答案 1 :(得分: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;
输出
纪要
Rees-Mogg,William
8714731个
如果您有多个<ProductItem>
,则必须循环播放,而不是像我一样直接访问它们。