坚持139

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

查询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;
}





posted on 2011-11-16 17:03  坚持139  阅读(8157)  评论(1编辑  收藏  举报