2013-09-27 4 views
0

Моей цели: Я хочу, чтобы разобрать XML-файл для «REGISTRATION_CATALOGNUMBER», который и отобразить его в текстовом поле. Мой файл XML выглядит следующим образом:ArgumentException был необработанным при разборе XML-файл

<?xml version="1.0"?> 
<!-- This file was generated. --> 
<ModificationMap> 
<replace> 
<!-- Asset Type --> 
<text symbol="__HIS_NAME__">Example</text> 
<text symbol="__HIS_Example1__">My Program</text> 
<text symbol="__HIS_Example2__">EG</text> 
<text symbol="__HIS_Example3__">XMLPARSING</text> 
<text symbol="__HIS_Example4__">Not Applicable</text> 
<text symbol="__HIS_ExampleINTERVAL__">300</text> 
</replace> 
<replace> 
<!-- HIS profile --> 
<text symbol="__EG_HIS_NAME__">EG_NotConfigured</text> 
<text symbol="__EG_HIS_PASSWORD__">password</text> 
<text symbol="__EG_HIS_ExampleINTERVAL__">300</text> 
<text symbol="__EG_SERIALNUMBER__">666</text> 
</replace> 
<replace> 
<!-- Changed Number and ID --> 
<text symbol="__Example_SERIALNUMBER__">123456789</text> 
<text symbol="__REGISTRATION_CATALOGNUMBER__">987654</text> 
<text symbol="__HER_ExampleINTERVAL__">300</text> 
<text symbol="__HER_LEVEL__">WARN</text> 
<text symbol="__Example_VERSION__">20</text> 
<text symbol="__Example_THIRDPARTYVERSION__">20</text> 
<!-- Asset Profile --> 
<text symbol="__HIS_MEMBERNAME__">EG_NotConfigured</text> 
<text symbol="__HIS_FRIENDLYNAME__">XMLProgram</text> 
<text symbol="__HIS_DESCRIPTION__">testprogram</text> 
</replace> 
<replace> 
<!-- Software director --> 
<text symbol="__ADMINUSERNAME__">admin</text> 
<text symbol="__ADMINPASSWORD__">password</text> 
<text symbol="__HIS_PORT__">0000</text> 
<text symbol="__HIS_SCHEME__">http</text> 
</replace> 
<replace> 
<!-- Misc settings --> 
<text symbol="__LOG_LEVEL__">ERROR</text> 
</replace> 
</ModificationMap> 

Мой код:

public UserControl1() 
{ 
    InitializeComponent(); 

    var dict2 = XDocument.Load(@"C:\Users\Smith\Desktop\DEMO.xml") 
     .Descendants("text") 
     .ToDictionary(f => f.Attribute("symbol").Value, 
     f => f.Value); 
    textBox7.Text = dict2["__REGISTRATION_CATALOGNUMBER__"]; 
} 

Я получаю ошибку:

ArgumentException was unhandled. An item with the same key has already been added.

Пожалуйста, вы можете помочь мне исправить эту проблему? Спасибо за вашу помощь! Я новичок в C#. :)

+0

Почему вы удалили свой предыдущий вопрос и затем снова задали одно и то же? –

+0

@JonSkeet Файл XML был неправильным. Я прошу прощения за то. Я попытался с этим новым XML-файлом. По-прежнему получалась та же ошибка: ArgumentException был необработанным. Элемент с тем же ключом уже добавлен. – Smith

+0

Вы должны были отредактировать предыдущий вопрос и ответить на мой комментарий в этом вопросе, тогда ... –

ответ

1

Вам не нужен весь документ, обработанный до Dictionary<string, string>, чтобы получить нужное значение. Попытайтесь следующее:

var query = XDocument.Load(@"C:\Users\Smith\Desktop\DEMO.xml") 
    .Root.Elements("replace").Elements("text") 
    .Where(f => (string)f.Attribute("symbol") == "__REGISTRATION_CATALOGNUMBER__") 
    .Select(f => (string)f); 
textBox7.Text = query.FirstOrDefault(); 
+0

Удивительный! Оно работает. Ценю вашу помощь. Благодарю. – Smith

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