XPath按多个子代的值选择元素

时间:2018-08-06 07:08:44

标签: c# xml linq xpath

我有一个XmlDocument和一个对象列表,这些对象封装了XmlElement的子代的名称和值。基本上,列表包含XmlElement的复合键。 我找不到通过“复合键”或LINQ中的表达式获取XmlElement的正确XPath。

Xml文档是这样的:

<Document>
  <ITEM>
    <HEADER>
      <No>1</No>
      <Description>Item 1</Description>
    </HEADER>
  </ITEM>
  <ITEM>
    <HEADER>
      <No>2</No>
      <Description>Item 2</Description>
    </HEADER>
  </ITEM>
</Document>

如果键列表是这样的(c#中的列表):

Keys= {
{Tag: "No", Value: "1"},
{Tag: "Description", Value: "Item 1"}
}

我要获取第一个“ HEADER”元素。

1 个答案:

答案 0 :(得分:0)

使用xml linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            Dictionary<int, string> dict = doc.Descendants("HEADER")
                .GroupBy(x => (int)x.Element("No"), y => (string)y.Element("Description"))
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());
        }
    }
}