0

我正在尝试解析“不那么正常”的 XML Web 服务。看起来 Web 服务正在返回一个字符串,其中包含 XML。

XML 如下所示:

<string>
  <NewDataSet>
    <Table>
      <CATID>0</CATID>
      <DEPID>0</DEPID>
    </Table>
    <Table>
      <CATID>1</CATID>
      <DEPID>1</DEPID>
    </Table>
  </NewDataSet>
<string>

这是我现在的代码,我已经尝试了许多变体,但无法正常工作。大多数时候它什么都不返回。我已经回显了 $xml,它将返回所有 XML,但我只需要显示 CATID 即可。

<?php

$file = file_get_contents('http://theWebSericeLink.here');
$xml = simplexml_load_string($file);

 //echo $xml;
 foreach($xml->Table as $item) {
   echo $item->CATID;
 }
?>

我也试过:

   foreach($xml->NewDataSet->Table as $item)

   foreach($xml->String->NewDataSet->Table as $item)

提前致谢。

4

4 回答 4

1

尝试这个

<?php
$k = '<string>
    <NewDataSet>
        <Table>
          <CATID>0</CATID>
          <DEPID>0</DEPID>
        </Table>
        <Table>
          <CATID>1</CATID>
          <DEPID>0</DEPID>
        </Table>
    </NewDataSet>
</string>';
$xml = simplexml_load_string($k);

   foreach($xml->NewDataSet->Table as $read){       
     echo $read->CATID."<br>";
    }
?>

输出

0
1
于 2013-08-30T14:10:18.157 回答
0

我想到了。

在我的 foreach 函数之前,我从 Web 服务返回的“xml 字符串”创建了一个 xml 文件:

$xml = simplexml_load_string($file);
$feed = '<?xml version="1.0" encoding="ISO-8859-1"?>'.$xml;

file_put_contents("workhorse.xml", $feed);
$myxml=simplexml_load_file("workhorse.xml");
于 2013-09-03T15:02:01.120 回答
0

如果您在回显时可以看到 XML,那么您可能需要使用 xpath。

$id = $xml->xpath('/table/CATID'); 
于 2013-08-30T14:03:47.730 回答
0

第一步,在末尾关闭标签,并以 " print_r" xml 变量开头。

print_r($xml);

由于有父母和孩子的标签,就像array通过每个字段得到一个结果一样。

在你的情况下,

<string>
   <NewDataSet>
     <Table>

所以

$tables = $xml->NewDataSet->Table;

foreach ($tables as $table)
{
    foreach ($table->CATID as $catid){
        echo $catid, "\n";
    }
}
于 2013-08-30T14:11:44.087 回答