Linq to XML 在 C# 中查询数据
Linq to XML Querying Data in C#
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、姓名、薪水等字段。
但是如何查询街道、城市、州、邮政编码、国家/地区等地址字段?
提前致谢。
将XML带入变量并使用Like
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
创建 Sub List
包含 Address
[=18] 的所有字段=]
使用您使用过的相同查询,但 select 来自 FirstPart
。
现在您可以轻松处理来自 var FirstPart
的数据
我也会按照 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"));
}
}
首先使用 x.Elements("Address")
选择所有地址元素,即可访问您要查找的地址元素。然后可以使用 .Element()
函数选择每个嵌套的地址元素。
所以 Response.Write()
的参数应该类似于:
x.Elements("Address").Element("Street");
使用
x.Descendants("Address").First().Element("Street")
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、姓名、薪水等字段。
但是如何查询街道、城市、州、邮政编码、国家/地区等地址字段?
提前致谢。
将XML带入变量并使用Like
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
创建 Sub List
包含 Address
[=18] 的所有字段=]
使用您使用过的相同查询,但 select 来自 FirstPart
。
现在您可以轻松处理来自 var FirstPart
我也会按照 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"));
}
}
首先使用 x.Elements("Address")
选择所有地址元素,即可访问您要查找的地址元素。然后可以使用 .Element()
函数选择每个嵌套的地址元素。
所以 Response.Write()
的参数应该类似于:
x.Elements("Address").Element("Street");
使用
x.Descendants("Address").First().Element("Street")