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 是只读的,那有啥好处?

似乎无法处理 XMLException?

System.Xml.XmlException:缺少根元素[关闭]

Web 服务调用导致 System.Xml.XmlException:'.',十六进制值 0x00