Как получить конкретные дочерние элементы элемента XML?

1

Я загружаю XML-документ, и у меня есть цикл foreach в его элементах, и я хочу выбрать в нем дочерние элементы с именем tag.

Это xml файл:

<?xml version="1.0" encoding="utf-8"?>
<view>
    <tag>
      <name>content</name>
      <tag>
        <name>div</name>
      </tag>
    </tag>
</view>

И это код:

string xmlString = System.IO.File.ReadAllText(HttpContext.Current.Server.MapPath("~/xml/xml.xml"));
XDocument doc = XDocument.Parse(xmlString);
XElement xmlElement = doc.Element("view");
foreach (var tagItem in xmlElement.Descendants("tag"))
{
    //do something
}

Код, написанный в цикле foreach, будет содержать все элементы тега на любой глубине, но я хочу получить первые глубинные (дети).

Как это сделать с помощью linq?

  • 0
    Если у вас есть xml, просто сгенерируйте xsd с помощью xsd.exe, а затем сгенерируйте классы (также с xsd.exe). Затем вы можете использовать xmlserializer для сериализации вашего xml в сгенерированную структуру классов.
  • 0
    Являются ли первые глубина tag элементы всегда дети view элемента? Тогда делай то, что говорит Бен ниже ...
Показать ещё 2 комментария
Теги:
c#-4.0

1 ответ

1
Лучший ответ

Предполагая, что нужные элементы всегда являются дочерними элементами элемента <view> вы можете использовать:

XElement xmlElement = doc.Element("view");
foreach (var tagItem in xmlElement.Elements("tag"))
{
    //do something (only direct children)
}

Больше ничего не сделать, чтобы получить нужные элементы. Затем вы можете реализовать свое "сделать что-то" с Linq, например:

XElement firstElem = xmlElement.Elements("tag").OrderBy(e => e.Name).First();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню