c#不能将撇号保存到XML中

本文关键字:XML 保存 不能 | 更新日期: 2023-09-27 17:50:35

我尝试将撇号'保存为XML,但总是得到错误。

当我想保存新项目时,首先我试着找到它。我用这个

XmlNode letters = root.SelectSingleNode("//letters");
XmlNode oldFileLetter = letters.SelectSingleNode("letter[@name='"+letterName+"']");

但是当letterName包含撇号'时,我得到一个错误,该路径未关闭

我还发现这个c#解析xml与撇号抛出异常,但当我做什么史蒂文说,这是OK的撇号,但双引号抛出异常。

我也需要传递" and "

c#不能将撇号保存到XML中

也可以用'

代替撇号
letterName = letterName.Replace("'", "'");
XmlNode letters = root.SelectSingleNode("//letters");
XmlNode oldFileLetter = letters.SelectSingleNode("letter[@name='"+letterName+"']");

看一下这个关于xml文件中特殊字符的帖子

这里的问题是XPath已经有一个撇号表示XPath中字符串的开始,因此letterName值中的任何撇号都将被解释为字符串值的结束。

与Felipe的建议相反,xpath本身不是XML,所以用'替换撇号是行不通的。它将避免错误,但如果letterName包含撇号,您将找不到要查找的节点。同样,"'""''"在c#中也没有区别,所以这也没有帮助。

我建议循环遍历字母元素并识别@name具有您正在寻找的值的元素:

XmlNode oldFileLetter = null;
foreach(XmlNode letterNameNode in letters.SelectNodes("letter/@name"))
{
    if(letterNameNode.Value.Equals(letterName))
    {
        oldFileLetter = letterNameNode.ParentNode;
        break; 
    }
}

我所知道的唯一另一种方法涉及装配一个系统,以允许在路径中定义和使用XPath变量,但这通常是多余的。

您试过转义它吗?

''

我认为你必须把它作为一个实体来写…我不确定,但我记得以前遇到过一次这个问题。

看看这个维基百科的帖子…http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

const string apo = "''";
XmlNode letters = root.SelectSingleNode("//letters");
XmlNode oldFileLetter = letters.SelectSingleNode("letter[@name="+apo+letterName+apo+"]")