1

我从正在使用的 api 返回以下内容。但是使用 SIMPLEXML 我无法访问这些值:

<?xml version="1.0" encoding="utf-16"?>
<Response Version="1.0">
   <DateTime>2/13/2013 10:37:24 PM</DateTime>
   <Contact_ID>151-233-DD</Contact_ID>
   <Quote_ID>ojc332-ewied-23e3ed</Quote_ID>
   <Status>Failure</Status>
   <Reason>Incorrect Contact ID</Reason>
</Response>

我正在设置这个:

$variable = new SimpleXMLElement($results);

SIMPLEXML 给了我以下内容,而不是我期望的 $variable->DateTime:

SimpleXMLElement Object ( [0] => 2/13/2013 10:37:24 PM 151-233-DD 0jc332-ewied-23e3ed Failure Incorrect Contract ID ) 

任何帮助深表感谢

4

2 回答 2

6

似乎是编码类型的原因,utf-16而内容有utf-8.

所以你需要改变你的编码类型,

$string = '<?xml version="1.0" encoding="utf-16"?>
  <Response Version="1.0">
  <DateTime>2/13/2013 10:37:24 PM</DateTime>
  <Contact_ID>151-233-DD</Contact_ID>
  <Quote_ID>ojc332-ewied-23e3ed</Quote_ID>
  <Status>Failure</Status>
  <Reason>Incorrect Contact ID</Reason>
 </Response>'; 
$xml = simplexml_load_string(preg_replace('/(<\?xml[^?]+?)utf-16/i', '$1utf-8', $string)); 

键盘演示

也可以使用utf8_encode,

$xml = simplexml_load_string(utf8_encode($string)); 
于 2013-02-14T06:58:03.210 回答
0

您只构建了一个 XML 元素(提示类名)。您需要将整个字符串加载为 XML 文档。方法如下:

<?php

$result= <<<XML
<?xml version="1.0" encoding="utf-8"?>
<Response Version="1.0">
   <DateTime>2/13/2013 10:37:24 PM</DateTime>
   <Contact_ID>151-233-DD</Contact_ID>
   <Quote_ID>ojc332-ewied-23e3ed</Quote_ID>
   <Status>Failure</Status>
   <Reason>Incorrect Contact ID</Reason>
</Response>
XML;

$dom= new DOMDocument();
$dom->loadXML($result, LIBXML_NOBLANKS);

然后可以使用 DOM 接口访问文档中的各个组件。

例如

$dates = dom->getElementsByTagName('DateTime');

DateTime这将获取一个包含所有元素的数组。

编辑

糟糕 -$dates将成为DOMNodeList.

然后,您可以使用各种方法访问节点并获取属性。

于 2013-02-14T07:04:30.380 回答