【问题标题】:c# parsing xml with and apostrophe throws exception时间:2019-05-01 标签:c#parseingxml 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。这样做的正确方法是什么。谢谢

【问题讨论】:

  • 您是否正在尝试完成这样的事情:

标签: c# xml parsing


【解决方案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 + @"""]";

【讨论】:

    猜你喜欢
    • 2012-02-16
    • 2012-11-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多