3

我试图将撇号 ' 保存到 XML,但总是出错。

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

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

但是当letterName包含撇号'我得到一个错误,那个路径没有关闭

我还发现这个c# parsing xml with and apostrophe throws exception但是当我按照 Steven 所说的进行操作时,撇号是可以的,但是双引号会抛出异常。

我也需要通过 " 和 '。

4

5 回答 5

3

您也可以将撇号替换为'

letterName = letterName.Replace("'", "'");

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

看看这个关于 xml 文件中特殊字符的线程。

于 2013-01-04T11:35:32.283 回答
1

您是否尝试过这样逃避它:

\'
于 2013-01-04T11:32:31.370 回答
1

这里的问题是您的 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 变量,但这通常是矫枉过正的。

于 2013-01-04T11:36:02.257 回答
1

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

看看这个维基百科线程...... http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

于 2013-01-04T11:38:12.443 回答
0
const string apo = "\'";
XmlNode letters = root.SelectSingleNode("//letters");
XmlNode oldFileLetter = letters.SelectSingleNode("letter[@name="+apo+letterName+apo+"]")
于 2013-01-04T11:36:53.923 回答