Как показать предупреждение, если есть повторяющиеся значения для одного и того же узла XML?
- Привет!
Я написал программу для чтения нескольких xml-файлов и разделения узлов по мере необходимости. Но теперь я хочу показать предупреждение для повторяющихся значений.
Программа работает нормально, но переменная, которую я использовал для проверки значения, всегда равна нулю.
Пожалуйста помочь.
С уважением
Аман
Что я уже пробовал:
private void btnStart_Click(object sender, EventArgs e) { string path = ""; int ctr = 0, i = 0; while (i < lvwArticles.Items.Count) { ListViewItem lvi = lvwArticles.Items[i]; if (lvi.SubItems[2].Text != path) { path = lvi.SubItems[2].Text; ctr = 0; skipme = false; } if (!skipme) { ctr++; lvi.EnsureVisible(); lvi.Checked = true; } //XDocument doc = new XDocument( // new XElement("root")); XElement credits = new XElement("credits"); XElement images = new XElement("images"); //XElement displaynames = new XElement("displayname"); //new XElement("root", // new XElement("credits"), // new XElement("images")) XDocument doc = XDocument.Load(lvi.Tag.ToString(), LoadOptions.None); XDocument xdoc = XDocument.Load(lvi.Tag.ToString(), LoadOptions.None); var result = xdoc.Descendants("image").ToList(); int counter = 1; foreach (var element in result) { string xyz = element.ToString(); XElement credit = element.Element("credit"); if (credit == null) { AddMsg(lvi.Text + " - Credit Information Missing for tag " + element.Element("primary_picture").Value); continue; } string cr = credit.Value.ToString(); if (credits != null) { XElement found = null; found = credits.Elements().Where(el => el.Element("credit").Value == cr).FirstOrDefault(); if (found != null) { AddMsg(lvi.Text + " - Duplicate Credit Information for tag " + element.Element("credit").Value); continue; } } XElement image = element; //image.Element("credit").Remove(); //XElement displayname = element.Element("displayname"); //String bildunterschrift = element.Element("bildunterschrift").Value; //MessageBox.Show(image, credit); counter++; // new number for next file credits.Add(new XElement(credit)); images.Add(new XElement(image)); //displaynames.Add(new XElement(displayname)); } doc.Descendants("image").Remove(); doc.Root.Add(credits); doc.Root.Add(images); //doc.Root.Add(displaynames); //doc.Save(lvi.Tag.ToString()); //XDocument xdocument = new XDocument(); //xdocument.Add("credits"); //xdocument.Add("images"); //xdocument.Save("ssdsdsd.xml", SaveOptions.DisableFormatting); i++; } if (i % 10 == 0) { Application.DoEvents(); System.Threading.Thread.Sleep(50); } i++; }
Richard MacCutchan
Вы должны дать нам хотя бы ключ к разгадке. Какая переменная и где вы ее устанавливаете?
Primo Chalice
- Привет!
XElement found-это переменная, и она всегда равна нулю.
Maciej Los
Как выглядит ваш xml-файл?
Что вы имеете в виду, говоря "дублировать" значения?
Primo Chalice
< изображение >
&ЛТ; заголовок >Это заголовок.&ЛТ; / подпись &ГТ;
< кредиты >это тестовое предложение. < / кредиты >
< / изображение >
< изображение >
&ЛТ; заголовок >Это еще один заголовок.&ЛТ; / подпись &ГТ;
< кредиты >это тестовое предложение.< / кредиты>
< / изображение >
Таким образом, в приведенном выше случае есть два тега изображений с одинаковым кредитом. Поэтому я хочу отобразить предупреждающее сообщение о том, что кредитное значение "это тестовое предложение" является дубликатом
ZurdoDev
Где ты застрял? Найти дубликаты? Или отображение сообщения?
Primo Chalice
- Привет!
Я застрял в поиске дубликатов. Как уже упоминалось, найденная переменная XElement всегда равна нулю, поэтому сообщение не отображается.
Пожалуйста помочь.
ZurdoDev
Я понятия не имею, о какой строке кода вы говорите. Но все, что вам нужно сделать, это отладить код.