【问题标题】:Error in Xml parsing with C# XmlDocument class使用 C# XmlDocument 类解析 Xml 时出错
【发布时间】:2015-03-31 12:05:28
【问题描述】:

当我将 xmls 属性添加到我的根元素时,此代码通过第三行的异常“对象引用未设置为对象的实例”但从根元素中删除 xmls 属性后它工作正常。

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("file.xml");    
MessageBox.Show(xmlDoc.SelectSingleNode("person/name").InnerText);

这是我的xml文件

<?xml version="1.0" encoding="utf-8"?>
<person xmlns="namespace path">
<name>myname</name>
</person>

我想知道为什么在将 xmlns 属性添加到我的根元素后它不起作用。我必须使用其他方法进行解析吗?。

【问题讨论】:

    标签: c# xml


    【解决方案1】:

    您需要将 namespace messenger 以解析命名空间添加到您的 xml 文件中。

    考虑这个例子

    XML 文件

    <?xml version="1.0" encoding="utf-8"?>
      <person xmlns="http://www.findpersonName.com"> // Could be any namespace
          <name>myname</name>
      </person>
    

    在你的代码中

             XmlDocument doc = new XmlDocument();
            doc.Load("file.xml");
    
            //Create an XmlNamespaceManager for resolving namespaces.
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
            nsmgr.AddNamespace("ab", "http://www.findpersonName.com");
            MessageBox.Show(doc.SelectSingleNode("//ab:name", nsmgr).InnerText);
    

    【讨论】:

    • 我没有创建这个 xml 文件,我不知道命名空间,所以命名空间必须在我的系统中。
    【解决方案2】:

    注意

    如果 XPath 表达式不包含前缀,则假定 命名空间 URI 是空的命名空间。如果您的 XML 包含一个 默认命名空间,您仍然必须添加前缀和命名空间 URI XmlNamespaceManager;否则,您将无法选择节点。 有关详细信息,请参阅使用 XPath 导航选择节点。

    XmlNamespaceManager ns = new XmlNamespaceManager(xmldoc.NameTable);
    ns.AddNamespace("something", "http://or.other.com/init");
    XmlNode node = xmldoc.SelectSingleNode("something:person/name", ns);
    

    【讨论】:

    • 差不多,treemonkey: XmlNode node = xmldoc.SelectSingleNode("something:person/name", ns);
    【解决方案3】:

    您可能需要考虑使用XDocumentLinq 来处理您的XML 文档。

    下面的例子提供了一个粗略的例子:

    XDocument xDoc = XDocument.Load("file.xml"); 
    var personNames = (from x in xDoc.Descendants("person").Descendants("name") select x).FirstOrDefault();  
    

    How to Get XML Node from XDocument

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      相关资源
      最近更新 更多