Linq to XML 在 C# 中查询数据

本文关键字:查询 数据 to XML Linq | 更新日期: 2023-09-27 18:36:34

XML

<?xml version="1.0" encoding="utf-8" ?>
<Employees>
  <Employee>
    <EmpId>1</EmpId>
    <Name>Sam</Name>
    <Sex>Male</Sex>
    <Salary>40000</Salary>
    <Phone Type="Home">423-555-0124</Phone>
    <Phone Type="Work">424-555-0545</Phone>
    <Address>
      <Street>7A Cox Street</Street>
      <City>Acampo</City>
      <State>CA</State>
      <Zip>95220</Zip>
      <Country>USA</Country>
    </Address>
  </Employee>
  <Employee>
    <EmpId>2</EmpId>
    <Name>Lucy</Name>
    <Sex>Female</Sex>
    <Salary>20000</Salary>
    <Phone Type="Home">143-555-0763</Phone>
    <Phone Type="Work">434-555-0567</Phone>
    <Address>
      <Street>Jess Bay</Street>
      <City>Alta</City>
      <State>CA</State>
      <Zip>95701</Zip>
      <Country>USA</Country>
    </Address>
  </Employee>

LINQ 表达式 c#

var Pro = from u in doc.Descendants("Employee") select u;
        foreach (var x in Pro)
        {
            Response.Write(string.Format("EMP ID: {0}, Emp Name: {1}", x.Element("EmpId"), x.Element("Name")));
        }

我可以查询 EmpID、姓名、薪水等字段。

但是如何查询地址字段,如街道,城市,州,邮政编码,国家/地区?

提前谢谢。

Linq to XML 在 C# 中查询数据

使用

x.Descendants("Address").First().Element("Street") 

我也会按照 Reniuz 的建议并反序列化为对象,但这是您当前如何执行此操作的示例:

foreach (var x in Pro)
        {
            Response.Write("EMP ID: {0}, Emp Name: {1}'r'n", x.Element("EmpId"), x.Element("Name"));
            var adrs = x.Descendants("Address");
            foreach (var a in adrs)
            {
                Response.Write("'tAddress Street: {0}, City: {1}'r'n", a.Element("Street"), a.Element("City"));    
            }
        }

将 XML 放入变量并使用

XDocument doc = XDocument.Parse(XMLVariableString);    
var FirstPart = from node in doc.Descendants("items") select node; //Select Data from doc using 
List<ListName> valuesNodes = new List<ListName>(); //create any with i.e <==

创建一个与 XML 中同名的List,并为包含 Address 的所有字段创建Address Sub List

使用您使用的相同查询,但从FirstPart中进行选择。

现在,您可以轻松处理来自var FirstPart的数据

首先使用 x.Elements("Address") 选择所有地址元素,可以访问您尝试查找的地址元素。 然后可以使用 .Element() 函数选择每个嵌套的 Address 元素。

因此,Response.Write()的参数应如下所示:

x.Elements("Address").Element("Street");