时间:2019-05-01 标签:c#parseingxml with and apostrophe throws exception

Posted

技术标签:

【中文标题】时间:2019-05-01 标签:c#parseingxml with and apostrophe throws exception【英文标题】:c# parsing xml with and apostrophe throws exception 【发布时间】:2011-05-27 14:47:24 【问题描述】:

我正在解析一个 xml 文件,但在尝试查找其中包含撇号的节点时遇到了问题。当项目名称没有这个时,一切正常。我尝试用不同的转义字符替换撇号,但运气不佳

string s = "/itemDB/item[@name='" + itemName + "']";

// Things i have tried that did not work
// s.Replace("'", "''");
// .Replace("'", "\'");

XmlNode parent = root.SelectSingleNode(s);

我总是收到 XPathException。这样做的正确方法是什么。谢谢

【问题讨论】:

您是否正在尝试完成这样的事情: 【参考方案1】:

对于撇号,将其替换为 '

【讨论】:

+1 - 也可能还有一些其他字符需要转义。 weblogs.sqlteam.com/mladenp/archive/2008/10/21/… 我试过 s= s.Replace("'", "'");这让我过去了异常,但返回 null 因为它认为它不在 xml 文件中。项目名称是随机的。连接是我能想到的选择正确节点的唯一方法。有没有更好的办法? 我从中解析的 xml 文件相当大,我没有修改它的选项。该文件中有类似的内容 【参考方案2】:

你可以这样做:

XmlDocument root = new XmlDocument();

root.LoadXml(@"<itemDB><item name=""abc'def""/></itemDB>");

XmlNode node = root.SelectSingleNode(@"itemDB/item[@name=""abc'def""]");

注意逐字字符串文字“@”和双引号。

您的代码将如下所示,无需替换任何内容:

var itemName = @"abc'def";

string s = @"/itemDB/item[@name=""" + itemName + @"""]";

【讨论】:

以上是关于时间:2019-05-01 标签:c#parseingxml with and apostrophe throws exception的主要内容,如果未能解决你的问题,请参考以下文章

2019.05.01亲测可用,强烈推荐CSDN免积分下载

运算符不存在:带有时区的 tstzrange && 时间戳

数据库mysql实操

减去日期时间以获得以月为单位的增量[重复]

时间

时间