时间: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 - 也可能还有一些其他字符需要转义。 weblogs.sqlteam.com/mladenp/archive/2008/10/21/… 我试过 s= s.Replace("'", "'");这让我过去了异常,但返回 null 因为它认为它不在 xml 文件中。项目名称是随机的。连接是我能想到的选择正确节点的唯一方法。有没有更好的办法? 我从中解析的 xml 文件相当大,我没有修改它的选项。该文件中有类似的内容你可以这样做:
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的主要内容,如果未能解决你的问题,请参考以下文章