У меня есть следующий файл xml, который состоит из тегов html, как показано ниже:

<?xml version="1.0" encoding="UTF-8"?>

<html>
<head>
<title>
title1
</title>
</head>

<body>
<fragment id="heading1">
<h1>
Heading 1
</h1>
</fragment>
<fragment id="heading2">
<h2>
Heading 2
</h2>
</fragment>
<fragment id="paragraph1">
<p>
Paragraph 1
</p>
</fragment>
</body>                  
</html>

Я пытаюсь извлечь все идентификаторы фрагментов и отобразить их с помощью linq-xml. Запрос показан ниже:

XDocument xelement = XDocument.Load("Path\\To\\XMLFile"); 
var name = from nm in xelement.Descendants("body")
select nm.Element("fragment").Attribute("id").Value;
Console.WriteLine(name);

Выход этого запроса возвращается:

заголовок1

Но я хочу:

заголовок1 заголовок2 абзац1

Что я делаю неправильно? Добрый совет.

Спасибо

0
Anvith 24 Мар 2014 в 16:48

2 ответа

Лучший ответ

Я протестировал, и он работает нормально!

XDocument po = XDocument.Load(@"XMLFile1.xml");
      IEnumerable<string> names = from id in po.Descendants("fragment").Attributes("id") select id.Value;
            string str = string.Empty;
            foreach (var el in names)
            {
                str += el;               
            }
            System.Console.WriteLine(str);
            Console.ReadKey();
1
Neel 24 Мар 2014 в 17:34
Спасибо, Нил. Но не могли бы вы объяснить, почему это не работает с XDocument?
 – 
Anvith
24 Мар 2014 в 17:33
Он работает с XDocument, см. мой обновленный ответ @Anvith
 – 
Neel
24 Мар 2014 в 17:35

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

IEnumerable<string> names = from id in xelement.Descendants("fragment").Attributes("id") select id.Value;

Или

IEnumerable<string> names = from frag in xelement.Descendants("fragment") select frag.Attribute("id").Value;
2
Martin Honnen 24 Мар 2014 в 17:10