编程语言
首页 > 编程语言> > c#-XmlException文本节点无法在此状态下出现(布尔值notWhiteSpace)

c#-XmlException文本节点无法在此状态下出现(布尔值notWhiteSpace)

作者:互联网

因此,当我尝试从文件创建XDocument时出现此错误,但问题是它仅在20%的时间内发生,但是我的程序需要调用此函数,该函数每20秒创建一次XDocument,因此,修复此问题至关重要.

这是我的功能的一个小片段,从文件加载到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对其进行编码,我已经尝试了所有这些方法,但问题仍然存在.我认为,如果它将在大多数时间运行,那么编码应该不是问题.有任何想法吗?

解决方法:

我认为可能是XML编码类型(这种情况是UTF-8)引起了错误.解决方案是将文件转换为ascii(删除BOM),或在没有BOM的情况下以UTF-8编码.

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

标签:unity3d,mono,linq-to-xml,xml,c
来源: https://codeday.me/bug/20191120/2046925.html