Ну, простыми словами:
Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.
Итак, как это решить:
if (i == null) {
// Handle this
}
Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);
Вы должны использовать XmlNamespaceManager в своем вызове SelectSingleNode () :
XmlNamespaceManager ns = new XmlNamespaceManager(xmldoc.NameTable);
ns.AddNamespace("msbld", "http://schemas.microsoft.com/developer/msbuild/2003");
XmlNode node = xmldoc.SelectSingleNode("//msbld:Compile", ns);
Таким образом, вам не нужно указывать пространство имен:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("your xml");
XmlNode node = xmlDoc.SelectSingleNode("/*[local-name() = 'Compile']");
XmlNode nodeToImport = xmlDoc2.ImportNode(node, true);
xmlDoc2.AppendChild(nodeToImport);
Взято справа от документации SelectSingleNode()
на MSDN :
Примечание. Если выражение XPath не содержит префикс, предполагается, что пространство имен URI - пустое пространство имен. Если ваш XML содержит пространство имен по умолчанию, вы все равно должны добавить URI префикса и пространства имен в XmlNamespaceManager; в противном случае вы не получите выбранный узел. Для получения дополнительной информации см. Выбор узлов с помощью XPath Navigation .
blockquote>И сразу следующий примерный код:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com"); XmlNode book = doc.SelectSingleNode("//ab:book", nsmgr);