查询XML可以通过XMLDocument,也可以通过XDocument查询。
本文介绍使用XElement查询XML的几种方法。
首先使用一个测试的XML文件。
<?xml version="1.0" encoding="utf-8" ?>
<AOnlineOrg>
<eSales>
<Member SortNo="1">
<Login>GUOXIN</Login>
<PositionID>1-25ISRB</PositionID>
<UserID>1-25ISRQ</UserID>
<BU>ICSF</BU>
</Member>
<Member SortNo="2">
<Login>LIUXIANG</Login>
<PositionID>1-196945</PositionID>
<UserID>1-19694A</UserID>
<BU>ICSF</BU>
</Member>
<Member SortNo="3">
<Login>QINYANG</Login>
<PositionID>1-10DAMN</PositionID>
<UserID>1-KJ3IA</UserID>
<BU>ICSF</BU>
</Member>
<Member SortNo="4">
<Login>XIAOCANFU</Login>
<PositionID>1-FKZUJF</PositionID>
<UserID>1-FKZUB5</UserID>
<BU>ICSF</BU>
</Member>
<Member SortNo="5">
<Login>XIAOHUAHU</Login>
<PositionID>1-JWZ3R</PositionID>
<UserID>1-JWZ4F</UserID>
<BU>ICSF</BU>
</Member>
<Member SortNo="6">
<Login>MANWEIZHAO</Login>
<PositionID>1-JDSX2</PositionID>
<UserID>1-1U5P9V</UserID>
<BU>IAG</BU>
</Member>
<Member SortNo="7">
<Login>LIJUANNIU</Login>
<PositionID>1-IABTN</PositionID>
<UserID>1-1PW39I</UserID>
<BU>IAG</BU>
</Member>
<Member SortNo="8">
<Login>QUANFANGZHOU</Login>
<PositionID>1-H1MFS</PositionID>
<UserID>1-ISATTR</UserID>
<BU>IAG</BU>
</Member>
<Member SortNo="9">
<Login>FENGYUANLI</Login>
<PositionID>1-DHZB5</PositionID>
<UserID>1-DI7M2</UserID>
<BU>IAG</BU>
</Member>
</eSales>
</AOnlineOrg>
第一种查询方法:
查询Member中属性SortNo小于3的,PositionID。
xe.Name不能自己转换成string,需要xe.Name.LocalName才能转换为string类。xe.Value为XElement的值。
如上图所示,XElement包括几个属性,FirstAttribute, HasAttributes, HasElements, IsEmpty, LastAttributes, Name, NodeType, Value。
string xmlFile = Server.MapPath("DMF/DMFOrgXMLFile.xml");
XDocument doc = XDocument.Load(xmlFile);
var childList = from e1 in doc.Descendants("Member") where (int)e1.Attribute("SortNo") < 3 select e1.Element("PositionID");
foreach (XElement xe in childList)
{
string s = xe.Name.LocalName;
Label1.Text = xe.Value;
}
第二种查询方法:
查询所有PositionID的清单。
string xmlFile = Server.MapPath("DMF/DMFOrgXMLFile.xml");
XDocument doc = XDocument.Load(xmlFile);
foreach (XElement xe in doc.Descendants("PositionID"))
{
string s = xe.Name.LocalName;
Label1.Text = xe.Value;
}
第三种方法:
查询Member中Login为LIUXIANG,PositionID。
string xmlFile = Server.MapPath("DMF/DMFOrgXMLFile.xml");
XDocument doc = XDocument.Load(xmlFile);
var childList = from e1 in doc.Descendants("Member") where e1.Element("Login").Value == "LIUXIANG" select e1;
foreach (XElement xe in childList)
{
string s = xe.Name.LocalName;
Label1.Text = xe.Value;
}
第四种方法:
如果查询的结果是Elements,可以通过HasElements来进行下一层的查询:
string xmlFile = Server.MapPath("DMF/DMFOrgXMLFile.xml");
XDocument doc = XDocument.Load(xmlFile);
var childList = from e1 in doc.Descendants("Member") where (int)e1.Attribute("SortNo") < 3 select e1;
foreach (XElement xe in childList)
{
if (xe.HasElements)
{
foreach (XElement childElement in xe.Elements())
{
string s1 = childElement.Value;
}
}
string s = xe.Name.LocalName;
Label1.Text = xe.Value;
}