Проблема с загрузкой xml в С#, содержащей google kml

Я пытаюсь получить доступ ко второму элементу в этом файле xml (тип google kml), и проблема, с которой я столкнулся, заключается в том, что я получаю возвращаемые нулевые значения для своего кода, если я не удалю <kml xmlns="http://earth.google.com/kml/2.0"> и связанное закрытие из исходного файла. Вот код, который я использую. (имейте в виду, что это работает, если я удалю указанную строку, поэтому я ищу чистый способ обработки этого файла без редактирования предоставленного исходного файла.)

        XmlDocument doc = new XmlDocument();
        doc.Load("2014_q2.xml");
        XmlNodeList xnlNodes = doc.SelectNodes("/kml/Document/Folder");

var Node2Use = xnlNodes.Item(1);

вот верхняя часть исходного файла:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0">
	<Document>
		<open>1</open>
		<Folder>
			<name>Pts_2014_q3_point Drawing</name>
			<Placemark>
				<description>HOLTSVILLE</description>
				<name>00501</name>
				<Style>
					<IconStyle>
						<color>ffc0c0c0</color>

У меня есть разрыв в строке var Node2Use = xnlNodes.Item(1);, поэтому я могу видеть содержимое, и именно здесь я вижу, что у меня есть нулевое значение, где у меня должно быть 2 для папки (как уже упоминалось, я получаю 2, когда удаляю эту строку с тегом kml.)


person Dan Dugas    schedule 28.10.2014    source источник


Ответы (1)


Вам нужно включить пространство имен. Что-то вроде этого:

XmlDocument doc = new XmlDocument();
doc.Load("2014_q2.xml");

XNamespace ns = "http://earth.google.com/kml/2.0";

XmlNodeList xnlNodes = doc.SelectNodes(ns + "/kml/Document/Folder");
person Donal    schedule 28.10.2014
comment
Я пытаюсь обработать этот фрагмент, но ошибки, с которыми я сталкиваюсь, не работают. Я немного изменил его: XmlDocument doc = new XmlDocument(); doc.Загрузить(2014_q2.xml); // XmlNode FolderListNode = doc.SelectSingleNode(/Document/Folder); var nsmgr = новый XmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace(какое-то имя, earth.google.com/kml/2.0); var xnlNodes = doc.SelectNodes(//somename:/Document/Folder); var Node2Use = xnlNodes.Item(1); - person Dan Dugas; 29.10.2014