欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

php输出xml格式报错--XML或文本声明不在实体的开头位置

程序员文章站 2022-04-13 14:51:37
...

解决方案1: http://blog.csdn.net/lilien1010/article/details/8793949 原来php文件保存问uft8式是会输出另外的空白字符, 将输出xml流的php文件修改为ANSI式的就好了。 (测试失败...) 解决方案2: 在调用echo $dom-saveXML(); 之前先清空输出缓冲区 ob_c

解决方案1:

http://blog.csdn.net/lilien1010/article/details/8793949


原来php文件保存问uft8格式是会输出另外的空白字符, 将输出xml流的php文件修改为ANSI格式的就好了。

(测试失败...)



解决方案2:

在调用 echo $dom->saveXML(); 之前先清空输出缓冲区

ob_clean();//for kill blank in document at first char


(测试OK)



备注:本人的版本php4.8+apache2.2,可能版本不同,解决方案不同


********************************************************************************************

附:JS解析XML文件和XML字符串

http://www.cnblogs.com/chjw8016/archive/2011/07/12/2104269.html


JS解析XML文件

php输出xml格式报错--XML或文本声明不在实体的开头位置

script type='text/javascript'>
loadXML
= function(xmlFile){
var xmlDoc=null;
//判断浏览器的类型
//支持IE浏览器
if(!window.DOMParser && window.ActiveXObject){
var xmlDomVersions = ['MSXML.2.DOMDocument.6.0','MSXML.2.DOMDocument.3.0','Microsoft.XMLDOM'];
for(var i=0;ixmlDomVersions.length;i++){
try{
xmlDoc
= new ActiveXObject(xmlDomVersions[i]);
break;
}
catch(e){
}
}
}
//支持Mozilla浏览器
else if(document.implementation && document.implementation.createDocument){
try{
/* document.implementation.createDocument('','',null); 方法的三个参数说明
* 第一个参数是包含文档所使用的命名空间URI的字符串;
* 第二个参数是包含文档根元素名称的字符串;
* 第三个参数是要创建的文档类型(也称为doctype)
*/
xmlDoc
= document.implementation.createDocument('','',null);
}
catch(e){
}
}
else{
return null;
}

if(xmlDoc!=null){
xmlDoc.async
= false;
xmlDoc.load(xmlFile);
}
return xmlDoc;
}
/script>

php输出xml格式报错--XML或文本声明不在实体的开头位置

JS解析XML字符串

php输出xml格式报错--XML或文本声明不在实体的开头位置

script type='text/javascript'>
loadXML
= function(xmlString){
var xmlDoc=null;
//判断浏览器的类型
//支持IE浏览器
if(!window.DOMParser && window.ActiveXObject){ //window.DOMParser 判断是否是非ie浏览器
var xmlDomVersions = ['MSXML.2.DOMDocument.6.0','MSXML.2.DOMDocument.3.0','Microsoft.XMLDOM'];
for(var i=0;ixmlDomVersions.length;i++){
try{
xmlDoc
= new ActiveXObject(xmlDomVersions[i]);
xmlDoc.async
= false;
xmlDoc.loadXML(xmlString);
//loadXML方法载入xml字符串
break;
}
catch(e){
}
}
}
//支持Mozilla浏览器
else if(window.DOMParser && document.implementation && document.implementation.createDocument){
try{
/* DOMParser 对象解析 XML 文本并返回一个 XML Document 对象。
* 要使用 DOMParser,使用不带参数的构造函数来实例化它,然后调用其 parseFromString() 方法
* parseFromString(text, contentType) 参数text:要解析的 XML 标记 参数contentType文本的内容类型
* 可能是 "text/xml" 、"application/xml" 或 "application/xhtml+xml" 中的一个。注意,不支持 "text/html"。
*/
domParser
= new DOMParser();
xmlDoc
= domParser.parseFromString(xmlString, 'text/xml');
}
catch(e){
}
}
else{
return null;
}

return xmlDoc;
}
/script>

php输出xml格式报错--XML或文本声明不在实体的开头位置

测试XML

php输出xml格式报错--XML或文本声明不在实体的开头位置

xml version="1.0" encoding="utf-8" ?>
DongFang>
Company>
cNname>1cNname>
cIP>1cIP>
Company>
Company>
cNname>2cNname>
cIP>2cIP>
Company>
Company>
cNname>3cNname>
cIP>3cIP>
Company>
Company>
cNname>4cNname>
cIP>4cIP>
Company>
Company>
cNname>5cNname>
cIP>5cIP>
Company>
Company>
cNname>6cNname>
cIP>6cIP>
Company>
DongFang>

php输出xml格式报错--XML或文本声明不在实体的开头位置


使用方法

var xmldoc=loadXML(text.xml)

var elements = xmldoc.getElementsByTagName("Company");

for (var i = 0; i var name = elements[i].getElementsByTagName("cNname")[0].firstChild.nodeValue;
var ip = elements[i].getElementsByTagName("cIP")[0].firstChild.nodeValue;

}