2014-11-18 5 views
0

У меня есть этот XML-файл:проверить, если значение узла является нулевым

<key1>value 1</key1> 
<key2>value 2</key2> 
<key3>value 3</key3> 
<key4>value 4</key4> 

Я хотел бы разобрать его и получить dictionnary, содержащий все атрибуты моего элемента. Для этого у меня есть этот код:

using (XmlReader reader = XmlReader.Create(new StringReader(xmlString))) 
{ 
    string key=""; 
    string value="";  
    while (reader.Read()) 
    { 
     switch (reader.NodeType) 
     { 
      case XmlNodeType.Element: 
       key=(reader.Name) 
       break; 
      case XmlNodeType.Text: 
       value=(reader.Value) 
       element_dictionnary.Add(key,value); 
       break;     
     } 
    }  
} 

Все работает нормально, проблема в том, если один узел пуст, как с этим файлом:

<key1></key1> 
<key2>value 2</key2> 
<key3>value 3</key3> 
<key4>value 4</key4> 

Все сдвинуто и мой dictionnary становится этим:

key1/значение2
key2/value3
.....

Итак, я хотел бы знать, как можно связать значение узла с именем узла, даже если значение узла пуст.

Заранее за вашу помощь.

+0

В документации сказано, что вы можете проверить с 'IsEmptyElement', если текущий элемент является пустым: HTTP : //msdn.microsoft.com/en-us/library/system.xml.xmltextreader.isemptyelement (v = vs.110) .aspx – Leif

+0

Я прочитал это, проблема в том, что он возвращает true для самозакрывающегося элемента, такого как , не для user2443476

ответ

0

Просто убедитесь, что reader.Value пуст, используя

string.IsNullOrEmpty(reader.Value) 

Так что ваш код стал

switch (reader.NodeType) 
{ 
    case XmlNodeType.Element: 
     key=(reader.Name) 
     break; 
    case XmlNodeType.Text: 
     value=(reader.Value) 
     if (!string.IsNullOrEmpty(value)) 
      element_dictionnary.Add(key,value); 
     break;     
}