У меня есть несколько xml файлов, postfix которых не является .xml, но .component Теперь я хочу обрабатывать их в программе С#, но кажется, что С# can not даже нашел корневой элемент этих xml файлов
var doc = new XmlDocument();
doc.Load(path); // MG: edited to Load based on comment
XmlNode root = doc.SelectSingleNode("rootNodename");
Кажется, что корень равен нулю. Как мне с этим справиться?
Учитывая, что вы решили путаницу Load
/LoadXml
, я ожидаю, что проблема будет пространством имен; у вас есть пример xml? Обработка xml с пространствами имен получает... "fun"; -p
Например:
XmlDocument doc = new XmlDocument();
doc.LoadXml(@"<test xmlns='myFunkyUri' value='abc'/>");
// wrong; no namespace consideration
XmlElement root = (XmlElement)doc.SelectSingleNode("test");
Console.WriteLine(root == null ? "(no root)" : root.GetAttribute("value"));
// right
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("x", "myFunkyUri"); // x is my alias for myFunkyUri
root = (XmlElement)doc.SelectSingleNode("x:test", nsmgr);
Console.WriteLine(root == null ? "(no root)" : root.GetAttribute("value"));
Обратите внимание, что даже если ваш xml объявляет псевдонимы xml, вам все равно придется повторно объявить их для своего диспетчера пространств имен.
LoadXml принимает строку XML, а не путь к файлу. Вместо этого попробуйте загрузить Load. Загрузка не касается расширения файла.
Вот ссылка на документацию для загрузки: http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.load.aspx
У меня была эта проблема: попробуйте сделать это перед установкой rootNodename Вместо этого: XmlNode root = doc.SelectSingleNode( "rootNodename" );
Сделайте это: XmlNode root = doc.SelectSingleNode( "/rootNodename" );