XmlException Text节点不能出现在这种状态下(Boolean notWhiteSpace)

时间:2015-01-21 04:05:37

标签: c# xml unity3d mono linq-to-xml

因此,当我尝试从文件创建XDocument时,我发生了此错误,但问题是它只发生了大约20%的时间,但我的程序需要调用此函数来创建XDocument每20秒一次,因此这对于修复至关重要。

这是我的函数从文件加载到XDocument

的一小部分
    //Read all patterns
    DirectoryInfo directory = new DirectoryInfo ("Assets/_Scripts/Items/Orb Patterns");
    orbPatterns = directory.GetFiles ().Cast<FileInfo> ().ToList ();
    //Pick a random pattern
    XDocument xmlDoc = XDocument.Load (orbPatterns [Random.Range (0, orbPatterns.Count - 1)].FullName);

XDocument.Load()行发生错误。 抛出的实际异常是

XmlException: Text node cannot appear in this state. 
file:///Assets/_Scripts/Items/Orb Patterns/pattern1.xml.meta Line 1, position 1.
Mono.Xml2.XmlTextReader.ReadText (Boolean notWhitespace)
Mono.Xml2.XmlTextReader.ReadContent ()
Mono.Xml2.XmlTextReader.Read ()
System.Xml.XmlTextReader.Read ()
Mono.Xml.XmlFilterReader.Read ()
System.Xml.Linq.XDocument.ReadContent (System.Xml.XmlReader reader, LoadOptions options)
System.Xml.Linq.XDocument.LoadCore (System.Xml.XmlReader reader, LoadOptions options)
System.Xml.Linq.XDocument.Load (System.String uri, LoadOptions options)
System.Xml.Linq.XDocument.Load (System.String uri)

正如我所说,它大约80%的时间都有效,另外20%它会抛出异常。但是,这只意味着该函数不会为当前迭代运行。 20秒后它会再次尝试并且通常都能正常工作。

我的XML文档应该非常好,这是一个例子

<?xml version="1.0" encoding="UTF-8"?>
<table>
<cell column="1" row="1">Red</cell>
<cell column="1" row="2">Red</cell>
<cell column="1" row="3">Red</cell>
<cell column="1" row="4">Red</cell>
<cell column="2" row="1">Red</cell>
<cell column="2" row="2">Blue</cell>
<cell column="2" row="3">Blue</cell>
<cell column="2" row="4">Red</cell>
<cell column="3" row="1">Red</cell>
<cell column="3" row="2">Multi</cell>
<cell column="3" row="3">Multi</cell>
<cell column="3" row="4">Red</cell>
<cell column="4" row="1">Red</cell>
<cell column="4" row="2">Blue</cell>
<cell column="4" row="3">Blue</cell>
<cell column="4" row="4">Red</cell>
</table>

我已经阅读了类似的问题,它们似乎与编码有关,并且在没有BOM的情况下对其进行编码,我已经尝试了所有这些,但问题仍然存在。我认为,如果它在大多数时间运行,那么编码不应该成为问题。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我认为XML编码类型(UTF-8就是这种情况)可能导致错误。解决方案是将文件转换为ascii(删除BOM),或以UTF-8编码而不使用BOM。

请看一下这个问题http://answers.unity3d.com/questions/10904/xmlexception-text-node-canot-appear-in-this-state.html,它会提出相同问题的帮助。