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

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

WBOY
WBOYOriginal
2016-06-06 19:46:291275Durchsuche

解决方案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;               

}






Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn