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的有時候也能解決,但當你改完後,還不能解決的時候,上面的方法對你也許有幫助html

相關文章
相關標籤/搜索