【问题标题】:How to Parse this XML String? [duplicate]如何解析这个 XML 字符串? [复制]
【发布时间】:2013-02-02 16:48:38
【问题描述】:

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

【问题讨论】:

  • 你能用xml_parse_into_struct()吗?
  • @Pekka웃 - 我看过那篇文章,但不太明白$res = $client-&gt;SoapFunction(array('param1'=&gt;'value','param2'=&gt;'value')); 的步骤。感谢您的帮助。

标签: php xml


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回复。这些链接看起来真的很有用!
【解决方案2】:

可以这样做:

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;

输出

回忆录
里斯-莫格,威廉
8714731

如果你有多个&lt;ProductItem&gt;,你将不得不循环它们而不是像我一样直接访问它们。

【讨论】:

  • 非常简单直接。非常感谢你教这个!
猜你喜欢
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
相关资源
最近更新 更多