Unity3d XmlException: Text node cannot appear in this state的方案

这个问题是utf-8编码的问题,如果是utf-8+bom那么就会出现这种问题,如果是单纯的utf-8就没有这种问题(当然如果你把他完全变成ansi,那也行) 
我在读写xml的时候遇到这个问题。查了好久在老外的一个网上看到了解决的方法。还有我自己总结的一些方法。

public bool LoadXml(string xmlFile) 
    { 
        if (xmlDocument == null) 
        { 
            throw new ArgumentNullException("xmlDocument"); 
        }

if (xmlFile == null || xmlFile.Length == 0) 
        { 
            throw new ArgumentNullException("xmlFile"); 
        }

// Debug.Log(xmlFile); 
// TextReader tr = new StringReader(xmlFile); 
//        xmlDocument.Load(tr); 
  
 System.IO.StringReader stringReader = new System.IO.StringReader(xmlFile); 
 stringReader.Read(); // 跳过 BOM 
 System.Xml.XmlReader reader = System.Xml.XmlReader.Create(stringReader); 
 xmlDocument.LoadXml(stringReader.ReadToEnd()); 
        return true; 
  
    } 
这个是bom的解释网上很多,我不解释了http://www.cnblogs.com/zhongru_tu/archive/2008/04/11/1147792.html 
这是一个自己写的导入xml的方法,注释的部分是我一开始使用的方法,没有注释的部分是我修改过的。这样你在读取xml的时候就可以跳过bom了.

如果你不需要发布为网页形式,那么还有一种方法也可以起到这样的效果,那就是重新写一下xml,彻底改变它的编码方式让其不带bom 
代码如下:

Encoding utf8NoBom = new UTF8Encoding(false); 
 string fileString = File.ReadAllText(writeUrl,utf8NoBom); 
 File.WriteAllText(writeUrl,fileString,utf8NoBom); 
注意你需要使用几个命名空间

using System.Xml; 
using System.Text;

using System; 
using System.IO; 
当然有时候你会发现unity虽然你写了命名空间但是有些类你还是找不到,那么你要到网上下专门的动态库(dll)放到Plugins文件夹下,当然有些读写本地文件的类在发布为网页形式的时候你是不能够使用的。

最后还有一点,你使用了上面的方法以后一定记住把你的xml文件的编码改为utf-8+bom这种格式,因为我们这个是对bom格式的读取。

还有一些其他的小方法你用其他编辑软件改为utf-8不带bom的有时候也能解决,但当你改完后,还不能解决的时候,上面的方法对你也许有帮助

原文地址:https://www.cnblogs.com/lancidie/p/9472704.html

时间: 2024-10-12 07:38:17

Unity3d XmlException: Text node cannot appear in this state的方案的相关文章

XmlException: Text node canot appear in this state

Unity中读取xml时出错: 代码如下: 出现这个错误的原因是Unity3D加载XML文件的时候,XML文件必须保存为UTF-8编码的格式,同时还必须去掉开头的两个字节(BOM)用来标识UTF-8用的.这时你可以选择一些编辑工具另存为UTF-8,(有些工具默认的会为UTF-8编码添加一个BOM标识), 如此修改  就OK了

node.js 多异步之间的协作方案

<深入浅出node.js> P77 学习 ///用于处理多个事件对应一个侦听器的情况var count = 0; var results = {}; var done = function (key, value){ results[key] = value; count++; if (count === 3){ ///渲染页面 render(results); } }; fs.readFile(template_path, "utf8", function(err, te

Unity3D手游开发日记(1) - 移动平台实时阴影方案

阴影这个东西,说来就话长了,很多年前人们就开始研究出各种阴影技术,但都存在各种瑕疵和问题,直到近几年出现了PSSM,也就是CE3的CSM,阴影技术才算有个比较完美的解决方案.Unity自带的实时阴影,也是这种技术,在电脑上很成熟的.我也是目睹了阴影技术的发展,以前也自己写过一些阴影,本来以为以后再也不用担心阴影了,结果做移动游戏以后,发现情况没那么乐观.这种基于深度的shadow map 技术,需要浮点纹理的支持,但有的移动平台不支持浮点纹理,即使支持,这种技术开销也特别大.所以我们需要重新思考

[转]XML中元素(Element)与节点(Node)的区别

前言: element是特殊的node 一段纯文本即text-node也是node 但不是element w3c的原话是 A node can be an element node, an attribute node, a text node, or any other of the node types explained in the "Node types" chapter. 一.xmlnode类节点: xmlnode类表示xml文档中的单个节点,其命名空间为:System.X

【HTML DOM】Node.nodeValue的用法

目录结构: contents structure [-] 语法 注意 详述 实例 参考文章 Note.noteValue 属性返回或设置当前属性的值. 语法 value = node.nodeValue; 如果有值的话,value则是一个包含当前节点值的字符串,如果没有则是null. 注意 对于document文档自身来说,nodeValue返回null.对于元素节点,nodeValue返回null.对于文本节点.注释和CDATA部分来说,noteValue返回其节点的内容. 对于节点属性来说,

U3D 网络库实现通信 基于Warensoft Unity3d

Warensoft Unity3d Communication Lib this is a high performance communication library for Unity3d,including some easy-to-use httpclasses,andsocket classes. And especially,it brings a totally new method to access to MS SQL SERVER2005+via http protocol.

js node 节点 原生遍历 createNodeIterator

1.createIterator msn: https://developer.mozilla.org/en-US/docs/Web/API/Document/createNodeIterator var filter = function(node){ return node.tagName.toLowerCase() == 'p' ? NodeFilter.FILTER_ACCEPT: NodeFilter.FILTER_REJECT; } var iterator = document.c

Csharp: speech to text, text to speech in win

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

Sublime Text 3118 插件集成定制汉化方案--赵亮(碧海情天)

Sublime Text 3118 插件集成定制汉化方案–赵亮(碧海情天) 原创内容,转载请保留原作者完整姓名信息 前言 一晃,离最开始为Sublime Text写汉化和插件开发与发布的教程 http://blog.csdn.net/theforever/article/details/8962727,都已经过去三年了.这其间,我又写过几篇具体介绍自己汉化定制的Sublime Text从3056到3061的递进式方案,大家可以参考: http://my.oschina.net/theforeve