php输出xml格式报错--XML或文本声明不在实体的开头位置
2014-10-01 00:32
369 查看
解决方案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文件
<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;i<xmlDomVersions.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>
JS解析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;i<xmlDomVersions.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>
测试XML
<?xml version="1.0" encoding="utf-8" ?>
<DongFang>
<Company>
<cNname>1</cNname>
<cIP>1</cIP>
</Company>
<Company>
<cNname>2</cNname>
<cIP>2</cIP>
</Company>
<Company>
<cNname>3</cNname>
<cIP>3</cIP>
</Company>
<Company>
<cNname>4</cNname>
<cIP>4</cIP>
</Company>
<Company>
<cNname>5</cNname>
<cIP>5</cIP>
</Company>
<Company>
<cNname>6</cNname>
<cIP>6</cIP>
</Company>
</DongFang>
使用方法
var xmldoc=loadXML(text.xml)
var elements = xmldoc.getElementsByTagName("Company");
for (var i = 0; i < elements.length; i++) {
var name = elements[i].getElementsByTagName("cNname")[0].firstChild.nodeValue;
var ip = elements[i].getElementsByTagName("cIP")[0].firstChild.nodeValue;
}
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文件
<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;i<xmlDomVersions.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>
JS解析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;i<xmlDomVersions.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>
测试XML
<?xml version="1.0" encoding="utf-8" ?>
<DongFang>
<Company>
<cNname>1</cNname>
<cIP>1</cIP>
</Company>
<Company>
<cNname>2</cNname>
<cIP>2</cIP>
</Company>
<Company>
<cNname>3</cNname>
<cIP>3</cIP>
</Company>
<Company>
<cNname>4</cNname>
<cIP>4</cIP>
</Company>
<Company>
<cNname>5</cNname>
<cIP>5</cIP>
</Company>
<Company>
<cNname>6</cNname>
<cIP>6</cIP>
</Company>
</DongFang>
使用方法
var xmldoc=loadXML(text.xml)
var elements = xmldoc.getElementsByTagName("Company");
for (var i = 0; i < elements.length; i++) {
var name = elements[i].getElementsByTagName("cNname")[0].firstChild.nodeValue;
var ip = elements[i].getElementsByTagName("cIP")[0].firstChild.nodeValue;
}
相关文章推荐
- XML 解析错误:XML 或文本声明不在实体的开头 位置
- 在jsp中拼xml格式数据问题:XML 解析错误:XML 或文本声明不在实体的开头
- XML解析错误:XML 或文本声明不在实体的开头 位置
- wordpress中rss的XML解析错误:XML或文本声明不在实体的开头
- Discuz!NT中管理帖子:精华、移动窗口显示不出来的问题——xml常见错误之XML 或文本声明不在实体的开头
- XML解析错误:XML或文本声明不在实体的开头
- xajax:Error: the XML response that was returned from the server is invalid. xml处理指令不在外部实体的开始部分位置
- PHP输出XML到页面的3种方式
- .NET C# 如何将光标置于 TextBox 控件中的文本的开头或末尾或当前位置
- [转载].NET C# 如何将光标置于 TextBox 控件中的文本的开头或末尾或当前位置
- php输出xml的实例(JavaScript操作XML实例)
- 输出DOM中的XML的实体定义(InternalSubset)
- XML解析错误:xml处理指令不在外部实体的开始部分(转)
- PHP在页面输出XML的方法.避免乱码.
- php查询数据库输出xml
- php输出xml格式字符串(用的这个)
- asp中输出xml “文本内容中发现无效字符”问题的解决(转)
- .NET C# 如何将光标置于 TextBox 控件中的文本的开头或末尾或当前位置
- 生成XML格式的查询结果,保存到一个XML文本中
- C# 如何将光标置于TextBox控件中的文本的开头或末尾或当前位置