获得Just 3rd level XML节点'名字LINQ C#

时间:2018-02-06 10:54:45

标签: c# xml linq

我试图从XML获取第3级名称。 我找到了这个,但它也给了我第四级,我不想要。 我该怎么办?

XDocument xdoc = XDocument.Load(path + @"\Pages\Results\Target_XML.xml");

            foreach (var name in xdoc.Root.Element("Veg").DescendantNodesAndSelf().OfType<XElement>().Select(x => x.Name).Distinct())
            {
                Console.WriteLine(name);
            }

示例(我想要Tom和Car作为字符串,没有Name和Cal) - 这是XML:

    <DEV>
        <Veg>
             <Tom>
                  <Name>aa</Name>
                  <Cal>99</Cal>
             </Tom>
             <Car>
                  <Name>aa</Name>
                  <Cal>99</Cal>
             </Car>
        </Veg>

        <Fru>
             <Ban>
                  <Name>aa</Name>
                  <Cal>99</Cal>
             </Ban>
        </Fru>  
    </DEV>

3 个答案:

答案 0 :(得分:1)

使用xml linq:

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

using System.Runtime.InteropServices;

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

            List<string> strings = doc.Elements().Elements().Elements().Select(x => x.Name.LocalName).ToList();



        }
    }

}

答案 1 :(得分:0)

您可以使用XElement的{​​{3}}属性引用子节点。像这样:

XmlNodeList childNodes = xdoc.Root.Element("Veg").ChildNodes;

在这种情况下,childNodes列表将包含您想要的第3级节点。

答案 2 :(得分:0)

var l_RootElement = XElement.Load(path + @"\Pages\Results\Target_XML.xml");
foreach (var l_VegElement in l_RootElement.Elements("Veg").Elements()) {
    Console.WriteLine(l_VegElement.Name);
}