2013-09-04 2 views
1

Я пытаюсь читать XML-файл, который выглядит как,Как анализировать XML с помощью C#, когда XML снова содержит один и тот же элемент?

<?xml version="1.0" encoding="UTF-8"?> 
<MyXML> 
<SESSION FORM_ID="775938" CID="" ID="HAKKI-LAPTOP_634975758376381105"> 
<FIELD NAME="A001DATE_M" Y="2.32" X="5.5" WIDTH="7.15" HEIGHT="0.99">First Value</FIELD> 
<FIELD NAME="A002" Y="2.32" X="17.83" WIDTH="2.38" HEIGHT="0.99">Second Value</FIELD> 
<FIELD NAME="A003" Y="1.11" X="17.83" WIDTH="2.38" HEIGHT="0.99">Third Value</FIELD> 
<FIELD NAME="A004" Y="1.11" X="5.5" WIDTH="2.38" HEIGHT="0.99">Fourth Value</FIELD> 
</SESSION> 
</MyXML> 

Я пытаюсь прочитать прочитать третье значение. Мой код отменяет получение первого значения.

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(sXMLPath); 
XmlNode node = xmlDoc.SelectSingleNode("MyXML/SESSION/FIELD"); 
if (node != null) 
{ 
    MessageBox.Show(node.InnerText); 
} 

Какие изменения необходимо внести, чтобы прочитать третье или четвертое значение?

Решение: (Предоставлено @DGibbs)

XDocument xml = XDocument.Load(sXMLPath); 
var elem = (from n in xml.Descendants("FIELD") 
      where n.Attribute("NAME").Value == "A004" 
      select n).FirstOrDefault(); 
MessageBox.Show(elem.Value); 

ответ

5

Использование LINQ к XML и выберите в NAME атрибута:

XDocument xml = XDocument.Load(fileLocation); 

var elem = (from n in xml.Descendants("FIELD") 
      where n.Attribute("NAME").Value == "A004" 
      select n.Value).FirstOrDefault(); 

Обратите внимание, что вам необходимо обновить элементы XML FIELD, поскольку они закрываются автоматически, а также имеют закрывающие теги.

Пример:

<FIELD NAME="A002" Y="2.32" X="17.83" WIDTH="2.38" HEIGHT="0.99" />Second Value</FIELD> 

Должно быть:.

<FIELD NAME="A002" Y="2.32" X="17.83" WIDTH="2.38" HEIGHT="0.99">Second Value</FIELD> 
+0

Я могу получить весь тег с помощью этого кода. Как получить только значение? – Dinesh

+0

См. Мое редактирование. Вам просто нужно выбрать свойство 'Value' элемента – DGibbs

+0

. Я получил с помощью свойства Value. благодаря – Dinesh

1

Расширьте селектор XPath с [3]:

XmlNode node = xmlDoc.SelectSingleNode("MyXML/SESSION/FIELD[3]"); 
+0

для использования этого кода, мне нужно знать серию, может быть выше, ответ поможет гораздо лучше. Благодарю. – Dinesh

1

Вы можете использовать DGibbs ответить или попробовать, как это, если вам нужны все поля в виде списка,

Получить все FIELDS в список и делать все, что вы хотите.,

XDocument xml = XDocument.Load(sXMLPath); 

IEnumerable<XElement> elmList = xml.Descendants("FIELD"); 

foreach (XElement elm in elmList) 
{ 
    // Your Logics goes Here  
} 
Смежные вопросы