Ищите документ XML с LINQ

У меня есть xml документ, подобный этому:

<Root>

    <MainItem ID="1">
        <SubItem></SubItem>
        <SubItem></SubItem>
        <SubItem></SubItem>
    </MainItem>
    <MainItem ID="2">
        <SubItem></SubItem>
        <SubItem></SubItem>
        <SubItem></SubItem>
    </MainItem>

    ...
</Root>

Я хочу возвратить весь элемент MainItem на основе значения идентификатора атрибута. Так эффективно, если идентификатор Атрибута равен 2, то дайте мне тот элемент MainItem назад.

Я не могу разработать, как сделать это с LINQ. Кажется, существует загрузка информации о Google, но я просто, может вполне казаться, не нахожу то, что я ищу.

Мало справки?

TIA

:-)

5
задан bruno conde 16 January 2010 в 11:18
поделиться

4 ответа

Это может быть что-то вроде этого:

        XDocument doc = XDocument.Load("myxmlfile.xml");
        XElement mainElement = doc.Element("Root")
                                    .Elements("MainItem")
                                    .First(e => (int)e.Attribute("ID") == 2);
        // additional work
3
ответ дан 14 December 2019 в 08:51
поделиться

Отсюда: Как: фильтр на атрибуте (XPath-linq к XML)

// LINQ to XML query
IEnumerable<XElement> list1 =
    from el in items.Descendants("MainItem")
    where (string)el.Attribute("ID") == "2"
    select el;

// XPath expression
IEnumerable<XElement> list2 = items.XPathSelectElements(".//MainItem[@ID='2']");
0
ответ дан 14 December 2019 в 08:51
поделиться

Как насчет этого:

// load your XML
XDocument doc = XDocument.Load(@"D:\linq.xml");

// find element which has a ID=2 value
XElement mainItem = doc.Descendants("MainItem")
                          .Where(mi => mi.Attribute("ID").Value == "2")
                          .FirstOrDefault();

if(mainItem != null)
{ 
  // do whatever you need to do
}

MARC

2
ответ дан 14 December 2019 в 08:51
поделиться
-

Я немного изменил свой XML, чтобы иметь значения:

<?xml version="1.0"?>
<Root>
    <MainItem ID="1">
        <SubItem>value 1</SubItem>
        <SubItem>val 2</SubItem>
        <SubItem></SubItem>
    </MainItem>
    <MainItem ID="2">
        <SubItem></SubItem>
        <SubItem></SubItem>
        <SubItem></SubItem>
    </MainItem>
</Root>

и с этим LINQ:

XDocument xmlDoc = XDocument.Load(@"C:\test.xml");
var result = from mainitem in xmlDoc.Descendants("MainItem")
             where mainitem.Attribute("ID").Value == "1"
             select mainitem;


foreach (var subitem in result.First().Descendants())
{
    Console.WriteLine(subitem.Value);
}

Console.Read();
2
ответ дан 14 December 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: