如何解析这个XML字符串?

时间:2013-02-18 09:37:51

标签: php xml

即使经过太多帖子,我也找不到用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和其他信息。非常感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

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

我想,你不应该在序列化的XML数据方面处理Web服务的响应。相反,使用标准API来包装它,并将其视为调用API函数调用。并处理返回数据而不是处理整个HTTP数据包数据。

这些资源可能有所帮助。请参阅此IBM's tutorial以及PHP Soap Client Manual

答案 1 :(得分:1)

可以这样做:

Demo

$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>,则必须循环播放,而不是像我一样直接访问它们。