2013-05-03 5 views
0

У меня есть некоторые XML в следующем формате:Проверьте словарь содержит атрибут, XElement значения

<select> 
    <option value="2" ID="451">Some other text</option> 
    <option value="5" ID="005">Some other text</option> 
    <option value="6" ID="454">Some other text</option> 
    <option value="15" ID="015">Some other text</option> 
    <option value="17" ID="47">Some other text</option> 
</select> 

У меня также есть словарь, который имеет ключевое значение, которое я хочу, чтобы соответствовать идентификатору соответствующей опции в xml выше и вернуть значение словаря. Я не уверен, как это сделать.

Я думал перекручивание вокруг словаря, как так:

 foreach (KeyValuePair<string, string> dictionaryEntry in dictionary) 
     { 
      if (dictionaryEntry.Key == "AttributeValue") 
      { 
       //do stuff here 

      } 
     } 

Но я не уверен, как сравнивать? Благодаря

+2

Поскольку у вас нет кода, я не собираюсь давать ответ, а просто общее руководство. Используйте синтаксический анализатор xml для анализа значения, которое вы используете в качестве ключа для словаря. Получите значение словаря, выполнив 'Dictionary [parsedOutOfXml]'. Есть много примеров разбора xml в C#. – evanmcdonnal

+0

Где код, который создает словарь? Словарь - это что? идентификатор параметра, значение (т. е. идентификатор - это ключ, а значение - значение?) – Neolisk

+0

У меня уже есть заполненный словарь. Ключевое значение одной из записей должно соответствовать одному из значений атрибута ID вышеописанного узла. Если это произойдет, если вы хотите вернуть значение словаря, если ничего не делать. – PorkyGimp

ответ

0

Что-то, как это должно работать:

class Program 
{ 
    static void Main(string[] args) 
    { 

     String xmlString = @"<select> 
     <option value=""2"" ID=""451"">Some other text</option> 
     <option value=""5"" ID=""005"">Some other text</option> 
     <option value=""6"" ID=""454"">Some other text</option> 
     <option value=""15"" ID=""015"">Some other text</option> 
     <option value=""17"" ID=""47"">Some other text</option> 
     </select>"; 

     Dictionary<string, string> theDict = new Dictionary<string, string>(); 
     theDict.Add("451", "Dict Val 1"); 
     theDict.Add("005", "Dict Val 2"); 
     theDict.Add("454", "Dict Val 3"); 
     theDict.Add("015", "Dict Val 4"); 
     theDict.Add("47", "Dict Val 5"); 

     using (XmlReader reader = XmlReader.Create(new StringReader(xmlString))) 
     { 
      XmlWriterSettings ws = new XmlWriterSettings(); 
      ws.Indent = true; 
      while (reader.Read()) 
      { 
       switch (reader.NodeType) 
       { 
        case XmlNodeType.Element: 
         if (reader.Name == "option") 
         { 
          System.Diagnostics.Debug.WriteLine(String.Format("ID: {0} \nValue: {1} \nDictValue: {2}", reader.GetAttribute("ID"), reader.GetAttribute("value"), theDict[reader.GetAttribute("ID")])); 
         } 
         break; 
       } 

      } 
     } 
    } 
} 

Я не совсем уверен, что есть в словаре, что вы упомянули, но мое предположение было вы 3 различных значений всего, «ценность» в XML , идентификатор в xml и другое значение в словаре, а ключ в словаре - это идентификатор в xml. Предполагая, что все это правильно, это даст вам то, что вам нужно от вашего xml.

0

Вы можете создать словарь из своего xml &, а затем получить значение на основе ключа.

Например.

XDocument doc1 = XDocument.Load(XmlFileName); 
var elements1 = (from items in doc1.Elements("select").Elements("option") 
          select items).ToDictionary(x => x.Attribute("ID").Value, x => x.Attribute("value").Value); 
Смежные вопросы