XmlException: '"' 是一个意外的标记。预期的标记是 '"' 或 '''
Posted
技术标签:
【中文标题】XmlException: \'"\' 是一个意外的标记。预期的标记是 \'"\' 或 \'\'\'【英文标题】:XmlException: '”' is an unexpected token. The expected token is '"' or '''XmlException: '"' 是一个意外的标记。预期的标记是 '"' 或 ''' 【发布时间】:2021-12-10 00:30:39 【问题描述】:我一直在尝试在 Unity 中制作一个读取 XML 文件的 C# 脚本。我得到了错误:
XmlException: '”' 是一个意外的标记。预期的标记是 '"' 或 '''。第 1 行,第 15 位。 System.Xml.XmlTextReaderImpl.Throw (System.Exception e) (在 :0)
这个错误对我来说没有意义,因为它被定向到第 1 行并且超出了那里的字符。好像是指向编译后的代码。
这是我根据教程编写的 C# 代码。很抱歉,如果它不好和不完整。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using UnityEngine;
using UnityEngine.UI;
public class XMLReader : MonoBehaviour
public GameObject textBox;
public string loadedDialogue;
public string loadedName;
public Sprite loadedPortrait;
public bool loadedEnd;
public int nextLine;
public Text dialogueBox;
public Text nameBox;
public Image portrait;
XmlDocument DialogueData;
// Start is called before the first frame update
void Start()
TextAsset xmlFile = Resources.Load<TextAsset>("Dialogue");
DialogueData = new XmlDocument();
DialogueData.LoadXml(xmlFile.text);
// Update is called once per frame
void Update()
public void UpdateDialogueBox()
LoadDialogue(nextLine);
nameBox.text = loadedName;
dialogueBox.text = loadedName;
portrait.sprite = loadedPortrait;
public void LoadDialogue(int dialogueID)
XmlNode data = DialogueData.SelectSingleNode("/Dialogue/chapter_1[@page='dlg_" + dialogueID.ToString() + "']");
if (DialogueData == null)
Debug.LogError("Couldn't locate dlg_" + dialogueID.ToString() + " in the list.");
DataLoader items = new DataLoader(data);
items.UpdateTextData();
class DataLoader
XMLReader reader;
public string id get; private set;
public string dialogue get; private set;
public string name get; private set;
public bool endDialogue get; private set;
public int continueDialogue get; private set;
public Color textColor get; private set;
public Sprite curPortrait get; private set;
public DataLoader(XmlNode curDialogue)
id = curDialogue.Attributes["ID"].Value;
name = curDialogue.Attributes["name"].InnerText;
dialogue = curDialogue.Attributes["dialogue"].InnerText;
endDialogue = bool.Parse(curDialogue["end"].InnerText);
continueDialogue = int.Parse(curDialogue["continue"].InnerText);
string pathToImage = "Portraits/" + curDialogue["portrait"].InnerText;
curPortrait = Resources.Load<Sprite>(pathToImage);
XmlNode colorNode = curDialogue.SelectSingleNode("color");
float r = float.Parse(colorNode["r"].InnerText);
float g = float.Parse(colorNode["g"].InnerText);
float b = float.Parse(colorNode["b"].InnerText);
float a = float.Parse(colorNode["a"].InnerText);
r = NormalizeColorValue(r);
b = NormalizeColorValue(g);
b = NormalizeColorValue(b);
a = NormalizeColorValue(a);
textColor = new Color(r, g, b, a);
float NormalizeColorValue(float value)
value /= 255f;
return value;
public void UpdateTextData()
reader.loadedDialogue = dialogue;
reader.loadedName = name;
reader.loadedEnd = endDialogue;
reader.loadedPortrait = curPortrait;
reader.nextLine = continueDialogue;
还有它正在读取的文件的 sn-p。
<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>
<chapter_1>
<page ID = “dlg_1”>
<portrait>SexyMan</portrait>
<name>???</name>
<dialogue>This is a test.</dialogue>
<color>
<r>0</r>
<g>0</g>
<b>0</b>
<a>255</a>
</color>
<end>false</end>
<continue>2</continue>
</page>
【问题讨论】:
那些花引号是无效的。 一般来说,您不应在 Word 等编辑器中键入 XML。 【参考方案1】:这些行中的智能(弯)引号在 XML 中无效。错误信息是指第 1 行,即 XML 声明,第 15 位是version=
中的第一个智能引号,但是这两行中的所有智能引号都无效。:
<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>
<page ID = “dlg_1”>
应该是这样的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<page ID = "dlg_1">
为避免这种情况发生,请停止在文字处理器中编写或编辑您的 XML,而改用文本编辑器。
【讨论】:
将所有”
更改为"
@AlanFerreira:是的,这正是我的回答。
是的,你的回答是正确的,我只是评论以简化修复操作。
谢谢!花了我一点时间来看看引号的区别。不知道为什么 Notepad++ 会这样做,但它现在可以工作了。是时候弄清楚加载元素了。以上是关于XmlException: '"' 是一个意外的标记。预期的标记是 '"' 或 '''的主要内容,如果未能解决你的问题,请参考以下文章
WCF 服务参考 - 在客户端获取“XmlException:名称不能以 '<' 字符开头,十六进制值 0x3C”
xsd:包含soapUI中的异常:org.apache.xmlbeans.XmlException:org.apache.xmlbeans.XmlException:错误:null之后的文件意外结束(
如果 XmlException.SourceUri 是只读的,那有啥好处?