Php 如何让loadXML加载我的XML文件?
由于某些原因,此操作给了我一个“无效的返回格式”Php 如何让loadXML加载我的XML文件?,php,xml,Php,Xml,由于某些原因,此操作给了我一个“无效的返回格式” $dom = new DomDocument('1.0', 'utf-8'); $ret = @$dom->loadXML($data); if (! $ret) { $_SESSION['error'] = 'invalid returned format'; return false; } 我使用$data=curl\u exec($socket)检索指向XML文件的链接,并且我能够通过使用此操作回显文件的内容类型,因
$dom = new DomDocument('1.0', 'utf-8');
$ret = @$dom->loadXML($data);
if (! $ret) {
$_SESSION['error'] = 'invalid returned format';
return false;
}
我使用$data=curl\u exec($socket)检索指向XML文件的链接,并且我能够通过使用此操作回显文件的内容类型,因此该文件存在:
if (strpos($content_type, 'text/xml') === FALSE) {
$_SESSION['error'] = 'invalid returned format';
return false;
}
我怎样才能使它不出错
谢谢
额外代码:
curl_setopt($socket, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($socket, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($socket, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($socket, CURLOPT_TIMEOUT, (15+5));
curl_setopt($socket, CURLOPT_SSL_VERIFYHOST, 2);
$data = curl_exec($socket);
$code = curl_getinfo($socket, CURLINFO_HTTP_CODE);
$content_type = curl_getinfo($socket, CURLINFO_CONTENT_TYPE);
curl_close($socket);
if ($code != 200) {
$_SESSION['error'] = 'Unable to talk to sm';
return false;
}
if (strpos($content_type, 'text/xml') === FALSE) {
$_SESSION['error'] = 'invalid returned format';
return false;
}
$dom = new DomDocument('1.0', 'utf-8');
$ret = @$dom->loadXML($data);
if (! $ret) {
$_SESSION['error'] = 'invalid returned format';
return false;
}
if ($dom->documentElement->nodeName != 'user') {
$_SESSION['error'] = 'authentication issue';
return false;
}
<?xml version="1.0" encoding="UTF-8"?>
<user login="myfile">
<application id="10" name="test" description="test"> … </application>
</user>
XML代码:
curl_setopt($socket, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($socket, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($socket, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($socket, CURLOPT_TIMEOUT, (15+5));
curl_setopt($socket, CURLOPT_SSL_VERIFYHOST, 2);
$data = curl_exec($socket);
$code = curl_getinfo($socket, CURLINFO_HTTP_CODE);
$content_type = curl_getinfo($socket, CURLINFO_CONTENT_TYPE);
curl_close($socket);
if ($code != 200) {
$_SESSION['error'] = 'Unable to talk to sm';
return false;
}
if (strpos($content_type, 'text/xml') === FALSE) {
$_SESSION['error'] = 'invalid returned format';
return false;
}
$dom = new DomDocument('1.0', 'utf-8');
$ret = @$dom->loadXML($data);
if (! $ret) {
$_SESSION['error'] = 'invalid returned format';
return false;
}
if ($dom->documentElement->nodeName != 'user') {
$_SESSION['error'] = 'authentication issue';
return false;
}
<?xml version="1.0" encoding="UTF-8"?>
<user login="myfile">
<application id="10" name="test" description="test"> … </application>
</user>
它很可能是
application/xml
,而不是text/xml
(除非您手动将标题设置为该值,或者您的服务器出于某种奇怪的原因将其与text/xml
关联)
如果不是这样,那么问题是您试图访问的文件的xml格式无效。使用一些在线XML验证器检查它,或者在Chrome或Firefox中使用它,它应该会显示synax错误
对未来的一些建议:
curl_setopt($socket, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($socket, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($socket, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($socket, CURLOPT_TIMEOUT, (15+5));
curl_setopt($socket, CURLOPT_SSL_VERIFYHOST, 2);
$data = curl_exec($socket);
$code = curl_getinfo($socket, CURLINFO_HTTP_CODE);
$content_type = curl_getinfo($socket, CURLINFO_CONTENT_TYPE);
curl_close($socket);
if ($code != 200) {
$_SESSION['error'] = 'Unable to talk to sm';
return false;
}
if (strpos($content_type, 'text/xml') === FALSE) {
$_SESSION['error'] = 'invalid returned format';
return false;
}
$dom = new DomDocument('1.0', 'utf-8');
$ret = @$dom->loadXML($data);
if (! $ret) {
$_SESSION['error'] = 'invalid returned format';
return false;
}
if ($dom->documentElement->nodeName != 'user') {
$_SESSION['error'] = 'authentication issue';
return false;
}
<?xml version="1.0" encoding="UTF-8"?>
<user login="myfile">
<application id="10" name="test" description="test"> … </application>
</user>
$content\u type
变量?如果您尝试过,您可以自己在几分钟内调试它希望能有所帮助。我看到您正在检查内容类型。听起来您可能正在获取包含标题的文件,这将使其成为无效的xml。如果没有,你需要发布更多的代码,包括curl部分。我粘贴了一些额外的代码!如果你给传入的XML一个标题
@mackiee-他实际上从curl中将XML作为字符串,所以这不是答案。@i--好的,oops:)嗯,我想知道简单XML\u加载\u字符串
是否会带来同样的错误?从下面的注释#1判断,是否与这里的问题相同?是否由于某种原因,标记之间存在冲突?也许是自我评价还是什么?