2015-07-10 2 views
1

Я пишу программу, и я пытаюсь захватить информацию из XML-файла, разбить его и сохранить информацию в 4-5 разных строках. Вот код, который я должен захватить XML-файл.Анализ XML-файла на строки в C#

private void getVersionXML() 
{ 
    sVersionConfigPath = sLocationKey + "Core\\config.xml"; //Path to XML File 
    XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.Load(sVersionConfigPath); //Load config.xml 
    XmlNodeList xmlNodes = xmlDoc.GetElementsByTagName("PrimaryDatabase"); 
    foreach (XmlNode xmlNode in xmlNodes) 
    { 
     label1.Text = xmlNode.SelectSingleNode("database").InnerText; //Breaks Here 
    } 

} 

Вот как выглядит XML-файл.

<ProgXML> 
    <PrimaryDatabase Updating="N"> 
     <Database Driver="SQL Server" Server="serverName" User="sa" Password="Iyp4kvRIS7Orl+NjkhIjvg==" Database="dbName" Owner="" Port="" UncBase="" ImpUser="" /> 
     <DataExists Action="Reset" When="5/20/2015 3:17:36 PM" /> 
     <TableCollection Name="Core" Who="CPUser" ProcessID="0" ProcessName="" Status="Complete" When="5/20/2015 3:17:47 PM" LayoutVersion="39" DataVersion="39" /> 
     <TableCollection Name="Prog" Who="CPUser" ProcessID="0" ProcessName="" Status="Complete" When="5/20/2015 3:17:47 PM" LayoutVersion="38" DataVersion="38" /> 
    </PrimaryDatabase> 
</ProgXML> 

По сути, я просто пытаюсь получить все, что показывает в <Database /> тег и сохранить его в виде строки (или в данном случае, просто печатать на этикетке для целей отладки).

Однако код сломается, где я прокомментировал выше, с помощью NullReferenceException для «Ссылка на объект, не установленную в экземпляр объекта». И я не совсем уверен, где я ошибся. Любая помощь будет принята с благодарностью. Благодарю.

ответ

1

Ваш DataBase узел не имеет значения, только такие атрибуты, как драйвер, сервер, ...

Чтобы получить значение атрибута:

string driver = xmlNode.SelectSingleNode("database").Attributes["Name"] ; 
+0

Точно, что я искал, насколько интересно, какие теги внутри тега были вызваны. Только проблема заключается в том, что вы не можете преобразовать строку в XMLAttribute, который вы должны вызвать '.Value' в конце строки. – Cistoran

2

Вы можете использовать Linq2Xml

var xDoc = XDocument.Load(filename); 
var dict = xDoc.Descendants("Database") 
      .First() 
      .Attributes() 
      .ToDictionary(x => x.Name, x => x.Value); 

Если вы хотите, чтобы значения только для целей отладки,

var str = string.Join("; ", xDoc.Descendants("Database") 
          .First() 
          .Attributes() 
          .Select(x => x.Name + "=" + x.Value)); 
0

выглядит, как будто это вопрос капитализации, что ваша конкретная проблема (это «база» в Xml и «базы данных» в C#.)

, как упоминалось ранее, LINQ к Xml также путь в эти дни ,

Кроме того, рассмотрите возможность использования свойства «OuterXml», если вы просто хотите получить сырое текстовое представление элемента и всего его содержимого.

Смежные вопросы