如何在php中解析xml数据

如何在php中解析xml数据,php,xml,web-services,parsing,rest,Php,Xml,Web Services,Parsing,Rest,我想知道这是怎么回事 出于测试目的,我制作了两个网站 一个正在从另一个调用REST服务 我提取包含文件内容的xml数据 如果我回显它,我可以看到一个字符串的数据 但是我如何在它上面使用simpelxml,从节点本身提取数据呢 如果我使用simplexml\u load\u文件($url),我会得到一些错误,说只允许xml声明 在文件的开头 我的测试文件中有这个 <?php $url='http://www.woonbel.nl/gps/setgpsloc'; //not working

我想知道这是怎么回事

出于测试目的,我制作了两个网站

一个正在从另一个调用REST服务

我提取包含文件内容的xml数据

如果我回显它,我可以看到一个字符串的数据

但是我如何在它上面使用simpelxml,从节点本身提取数据呢

如果我使用simplexml\u load\u文件($url),我会得到一些错误,说只允许xml声明 在文件的开头

我的测试文件中有这个

<?php

$url='http://www.woonbel.nl/gps/setgpsloc';
//not working
$xml =simplexml_load_file($url);   

print_r($xml);

//just a string
$xml=file_get_contents($url);
echo "<h3>$xml</h3><br>";

?>

这就是我发送的xml

我从包含在php文件顶部的类文件发送此消息 如果我确定调用了webservice,那可能与声明错误有关

header('Content-type: text/xml');
echo "<?xml version=\"1.0\"?>\n";
echo "<response>\n";
echo "\t<status>$status_code</status>\n";
echo "\t<fout>Geen</fout>\n";
echo "</response>";
标题('Content-type:text/xml');
回音“\n”;
回音“\n”;
回显“\t$status\u code\n”;
回显“\tGeen\n”;
回声“;

谢谢,Richard,声明前有空行吗?

听起来文件顶部有一个空行,它应该以xml声明开头。例如:

<?xml version="1.0" encoding="utf-8"?>

您的REST服务应该返回XML内容,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<results>
  <result>
    <value awesome="true">LOLCATS</value>
  </result>
</results>
SimpleXML的PHP文档包含更复杂/真实的示例

对于特定的XML:

$xml = simplexml_load_string(file_get_contents('http://example.com/rest.xml'));

$status = $xml->status;
$fout = $xml->fout;

错误消息清楚地表明,xml数据的开头有一个空格、一行或一个字符。这可能是文件编码问题。

如果看不到特定的文件,很难判断错误是什么。xml看起来还可以。检查file_get_内容返回的内容,并在file_get_内容以字符串形式返回xml标记中包含的数据之前检查任何内容。我可以看到,因为我已经将它回显到页面。这是我不理解的部分,如果我想将xml数据拉入,那么整个文件必须是一个xml文件。那么,它就不再是html文件了?那么,当你想显示xml中的数据时,它到底是如何工作的呢?Richard,你必须检查你得到的字符串并确保它是有效的xml。然后您就可以使用simpleXML了。如何检查它是否是有效的xml?file_get_内容仍然是获取xml的一个选项,因为我从其他教程中得到了这个选项。也许我必须将文件内容放入simplexml加载字符串中?格式良好的HTML通常是XHTML,实际上也是XML。是的,我只是想了想,只有我的封闭标签是命名响应,url不包含任何XML扩展名,只包含名词。添加到特定XML的代码中。SimpleXML在从XML文件生成可用的PHP数据结构方面做得很好。感谢您编辑我的问题。我仍然缺少一些东西,因为我得到了声明错误?我的测试文件中正好有两行,即$url=the_url$xml=simplexml_load_string(file_get_contents($url));解决方案是,我需要在xml版本1.0和编码之间留出一个空间。。。是那个小东西引起的。
$xml = simplexml_load_string(file_get_contents('http://example.com/rest.xml'));

$status = $xml->status;
$fout = $xml->fout;