繁体   English   中英

使用C#LINQ to XML的XML

[英]XML with C# LINQ to XML

以下是XML文档的示例。

<People>
   <Person>
       <Name>ABC </Name>
       <SSN>111111</SSN>
       <Address>asdfg</Address>
   </Person>
</People>

我需要获取标签名称,而不是标签名称之间的值。 也就是说,在人员标签下,我应该获取NameSSNAddress节点,而不要获取ABC111111asdfg值。

我需要使用LINQ to XML并在C#中对其进行查询。

我该怎么做?

这将名称返回为字符串列表:

var doc = XDocument.Parse(@"<People>
   <Person>
       <Name>ABC </Name>
       <SSN>111111</SSN>
       <Address>asdfg</Address>
   </Person>
</People>"
);

var list = doc.Root.Element("Person").Descendants()
              .Select(node => node.Name.LocalName).ToList();

如果您使用的是XElement而不是XDocument,则可以从上述代码中删除.Root并获得正确的结果。

建立课程

public class Person
{
     public string Name {get; set;}
     public int SSN {get; set;}
     public string Address {get; set;}
}

并以此方式创建一个新人;

List<Person> NewPersons = new List<Person>();
XDocument doc = XDocument.Load(xmlFile);     
foreach(XElement xElem in doc.Descendants("Person"))
{
    NewPersons.Add(new Person
            {
                Name = xElem. Element("Name").Value,
                SSN = xElem.Element("SSN").Value,
                Address = xElem.Element("Address").Value,
            });
}

你可以这样子得到...

string xml = "<People> <Person> <Name>ABC </Name> <SSN>111111</SSN> <Address>asdfg</Address> </Person> <Person> <Name>ABC </Name> <SSN>111111</SSN> <Address>asdfg</Address> </Person> </People>";

XElement xmlData = XElement.Parse(xml);

foreach(XElement xmlPerson in xmlData.Elements("Person"))
{
    List<string> TagsForThisPerson = new List<string>();
    foreach(XElement xmlTag in xmlPerson.Elements())
    {
        TagsForThisPerson.Add(xmlTag.Name.ToString());
    }
    TagsForThisPerson.Dump();
}

下面列出了用于获取名称的简单LINQ语法。 假定您已将XML加载到名为doc的XDocument变量中。

var nodeNames = from node in doc.Descendants("Person").First().Descendants()
                select node.Name.LocalName;

它只看第一人称。 如果XML文档中有多个,则名称列表可能不是您想要的(没有理由一遍又一遍地重复节点的所有名称)。 这样,您可以获得仅第一人称的节点名称的列表,但它确实假定第一个人将具有完整的名称列表。 如果它们不同,则需要从所有节点构建一个不同的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM