LINQ to XML 简介






4.29/5 (4投票s)
一篇关于 LINQ to XML 的文章

引言
XML 被广泛用于存储和格式化数据。使用当前的 API,处理和操作 XML 数据略显繁琐。
LINQ to XML (.NET 3.5) 通过类似于 SQL 的查询体验,使 XML 处理更加容易。
背景
在本文中,我们将了解如何使用 LINQ 处理 XML 的基本知识,我们将处理以 XML 格式存储和读取服务器信息。
Using the Code
该项目是一个 Windows 应用程序,其中包含一个表单,用于收集要存储的服务器信息,格式如下
<servers>
<server>
<address>localhost</address>
<displayname>DB1</displayname>
<uid>sa</uid>
<pwd>sa</pwd>
<db1>DB1</db1>
<db2>DB1</db2>
</server>
</servers>
让我们查看下面的代码,它读取 XML 文件并获取服务器名称列表
public static List<string> GetAllServers()
{
List<string> serversList = new List<string>();
try
{
var servers = from e in XElement.Load( path ).Elements( "server" )
select ( string )e.Element( "displayname" );
foreach ( var server in servers )
{
if ( !string.IsNullOrEmpty( server ) )
serversList.Add( server );
}
return serversList;
}
catch ( Exception ex )
{
ServerInfoDialog.ShowErrorMessage( ex.Message );
}
return serversList;
}
上面的代码通过指定的路径加载 XML 文件,并从 'server
' 元素中检索所有显示名称。
现在,让我们查看用于更新或将新的服务器信息添加到文件中的代码
public void SaveConfig()
{
XElement doc = XElement.Load( path );
IEnumerable<XElement> serverInformation =
( from b in doc.Elements( "server" )
where ( ( string )b.Element( "displayname" ) ).Equals( DisplayName )
select b );
// Updation of existing element
if ( serverInformation.Count() > 0 )
{
foreach ( XElement xe in serverInformation )
{
xe.SetElementValue( "address", Address );
xe.SetElementValue( "displayname", DisplayName );
xe.SetElementValue( "uid", UserId );
xe.SetElementValue( "pwd", Password );
xe.SetElementValue( "db1", DB1 );
xe.SetElementValue( "db2", DB2 );
}
}
// Creation of new element
else
{
XElement newServer = new XElement( "server",
new XElement( "address", Address ),
new XElement( "displayname", DisplayName ),
new XElement( "uid", UserId ),
new XElement( "pwd", Password ),
new XElement( "db1", DB1 ),
new XElement( "db2", DB2 ) );
doc.Add( newServer );
}
doc.Save( path );
}
上面的代码首先查找是否存在具有相同显示名称的元素。如果找到,则更新该服务器信息,否则创建一个新元素并在最后保存文件。
现在让我们获取用户选择的服务器的所有信息并显示它
public void SetServerInformation( string selectedServer )
{
XDocument doc = XDocument.Load( path );
var serverInformation = from serverInfo in doc.Descendants( "server" )
where serverInfo.Element( "displayname" ).Value ==
selectedServer
select new ServerInfoService
{
Address = serverInfo.Element( "address" ).Value,
DisplayName =
serverInfo.Element( "displayname" ).Value,
UserId = serverInfo.Element( "uid" ).Value,
Password = serverInfo.Element( "pwd" ).Value,
DB1 = serverInfo.Element( "db1" ).Value,
DB2 = serverInfo.Element( "db2" ).Value
};
}
上面的代码加载文件并读取所有元素信息,其中显示名称将是用户选择的服务器。
结论
本文简要介绍了使用 LINQ 处理 XML。有关 LINQ 的更多信息,请参阅下面的链接。
参考文献
历史
- v1.0 - 初始签入