
抓到本地,然后再用XmlReader 进行读取.最终使用linq To XML 将查询到的数据转成对象列表:)
本文中所使用的XML中的数据取自sqlSERVER自带的数据库northWind中的Customers表,通过使用如下sql脚
本进行获取.
SELECT top 10 * FROM Customers FOR XML auto , ELEMENTS XSINIL
大家可以在sqlServer 2005 Management Studio 中单击"新建查询",选取系统自带的northWind数据库,
并在查询窗口下运行上面查询脚本,如下图所示:
将得到的XML内容保存到一个新建的XML文件中,名称为:Customer.xml, 并为其加上:
<? xml version="1.0" ?>
< table >
.//上面的XML内容
</ table >
数据准备好了,将其看到项目中的ClIEntBin文件夹中.下面就开始写程序了:)
首先我们要先建立一个Silverlight Application,名称为:XmlReader
然后将下面的Xaml内容拷则到Page.xaml中:
< UserControl x:Class ="XmlReader.Page" xmlns ="http://schemas.microsoft.com/clIEnt/2007"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
WIDth ="800" Height ="400" xmlns:my ="clr-namespace:System.windows.Controls;assembly=System.windows.Controls.Data" >
< StackPanel margin ="10,10,10" >
< my:DataGrID x:name ="CustomersGrID" Height ="300" margin ="0,5,10"
RowBackground ="lightSteelBlue" AlternatingRowBackground ="AliceBlue" > <!-- autoGenerateColumns="True" -->
< my:DataGrID.Columns >
< my:DataGrIDTemplateColumn header ="CustomerID" >
< my:DataGrIDTemplateColumn.CellTemplate >
< DataTemplate >
< StackPanel OrIEntation ="Horizontal" >
< TextBlock Text ="{Binding CustomerID}" />
</ StackPanel >
</ DataTemplate >
</ my:DataGrIDTemplateColumn.CellTemplate >
</ my:DataGrIDTemplateColumn >
< my:DataGrIDTextBoxColumn
header ="Contactname"
WIDth ="100"
displayMemberBinding ="{Binding Contactname}"
FontSize ="16" Visibility ="Visible" >
< my:DataGrIDTextBoxColumn.ElementStyle >
< Style targettype ="TextBlock" >
< Setter Property ="textwrapPing" Value ="Wrap" />
</ Style >
</ my:DataGrIDTextBoxColumn.ElementStyle >
< my:DataGrIDTextBoxColumn.EditingElementStyle >
< Style targettype ="TextBox" >
< Setter Property ="Foreground" Value ="Blue" />
</ Style >
</ my:DataGrIDTextBoxColumn.EditingElementStyle >
</ my:DataGrIDTextBoxColumn >
< my:DataGrIDTemplateColumn header ="Companyname" >
< my:DataGrIDTemplateColumn.CellTemplate >
< DataTemplate >
< TextBlock Text ="{Binding Companyname}" />
</ DataTemplate >
</ my:DataGrIDTemplateColumn.CellTemplate >
</ my:DataGrIDTemplateColumn >
< my:DataGrIDTemplateColumn header ="Address" >
< my:DataGrIDTemplateColumn.CellTemplate >
< DataTemplate >
< TextBlock Text ="{Binding Address}" />
</ DataTemplate >
</ my:DataGrIDTemplateColumn.CellTemplate >
</ my:DataGrIDTemplateColumn >
< my:DataGrIDTemplateColumn header ="City" >
< my:DataGrIDTemplateColumn.CellTemplate >
< DataTemplate >
< TextBlock Text ="{Binding City}" />
</ DataTemplate >
</ my:DataGrIDTemplateColumn.CellTemplate >
</ my:DataGrIDTemplateColumn >
< my:DataGrIDTemplateColumn header ="PostalCode" >
< my:DataGrIDTemplateColumn.CellTemplate >
< DataTemplate >
< TextBlock Text ="{Binding PostalCode}" />
</ DataTemplate >
</ my:DataGrIDTemplateColumn.CellTemplate >
</ my:DataGrIDTemplateColumn >
< my:DataGrIDCheckBoxColumn
header ="Region?"
WIDth ="75"
displayMemberBinding ="{Binding Region}"
IsThreeState ="True" />
</ my:DataGrID.Columns >
</ my:DataGrID >
< StackPanel >
< button Click ="OnClick" GrID.Row ="1" Content ="生成仅包含 CustomerID, Companyname 的xml" ></ button >
</ StackPanel >
</ StackPanel >
</ UserControl >
上面因为使用了DataGrID控件,所以在UserControl中多了一行代码进行名空间的解析,如下:
xmlns:my="clr-namespace:System.windows.Controls;assembly=System.windows.Controls.Data"
下面就是相应的CS代码了,首先我们需要定义一个CustomerInfo类在XmlReader项目中,其作用就是编写liNQ
TO XML 时进行数据转换和相应绑定,其代码如下:
/// <summary>
/// 客户类信息, 详情参见Customers.xml文件
/// </summary>
public class CustomerInfo
{
public string CustomerID { get ; set ; }
public string Companyname { get ; set ; }
public string Contactname { get ; set ; }
public string ContactTitle { get ; set ; }
public string Address { get ; set ; }
public string City { get ; set ; }
public string PostalCode { get ; set ; }
public string Country { get ; set ; }
public string Phone { get ; set ; }
public string Fax { get ; set ; }
public bool Region { get ; set ; }
}
紧跟着就是实现代码了,请看如下代码段(相关代码见注释):
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
this .Loaded += new RoutedEventHandler(Page_Loaded);
}
voID Page_Loaded( object sender, RoutedEventArgs e)
{
// WebClIEnt读取指定路径下的XML文件
WebClIEnt clIEnt = new WebClIEnt();
clIEnt.OpenReadCompleted += OnReadComplated;
clIEnt.OpenReadAsync( new Uri( " Customers.xml " , UriKind.relative));
}
// 读取XML流中的相应内容后,将CustomerInfo类实例列表绑定到DataGrID控件
voID OnReadComplated( object sender, OpenReadCompletedEventArgs e)
{
// 获取信息
XElement xml = XElement.Load(System.Xml.XmlReader.Create(e.Result));
// 定义查询方法
var query = from c in xml.DescendantsAndSelf( " Customers " )
select new CustomerInfo
{
CustomerID = c.Elements( " CustomerID " ).SingleOrDefault().Value,
Companyname = c.Elements( " Companyname " ).SingleOrDefault().Value,
Contactname = c.Elements( " Contactname " ).SingleOrDefault().Value,
ContactTitle = c.Elements( " ContactTitle " ).SingleOrDefault().Value,
Address = c.Elements( " Address " ).SingleOrDefault().Value,
City = c.Elements( " City " ).SingleOrDefault().Value,
PostalCode = c.Elements( " PostalCode " ).SingleOrDefault().Value,
Country = c.Elements( " Country " ).SingleOrDefault().Value,
Phone = c.Elements( " Phone " ).SingleOrDefault().Value,
Fax = c.Elements( " Fax " ).SingleOrDefault().Value,
Region = c.Elements( " Region " ).SingleOrDefault().Value != "" ? true : false
};
// 进行DataGrID控件数据项绑定
CustomersGrID.ItemsSource = query.ToList();
}
// 输入仅包含CustomerID,Companyname的XML内容
voID OnClick( object sender, EventArgs args)
{
// 获取DataGrID绑定的数据项信息
List < CustomerInfo > data = CustomersGrID.ItemsSource as List < CustomerInfo > ;
// 定义新的XML内容(结构)
XElement xml = new XElement( " CustomerShortInfo " ,
from c in data
select new XElement( " CustomerID " ,
new XAttribute( " CustomerID " , c.CustomerID),
new XAttribute( " Companyname " , c.Companyname)));
// 使用下面的方法直接输出,该方法可用于UI界面调试,名空间引用自 System.windows.browser;
HTMLPage.Window.Alert(xml.ToString());
}
}
最后还要包含下列空间的引用:
using System.Xml;
using System.Xml.linq;
using System.Net;
using System.windows.browser;
这样我们就可以编译运行一下代码,最终效果如下图:
好了,今天的内容就先到这里了:)
源码下载链接,请点击这里:) 总结
以上是内存溢出为你收集整理的在silverlight中使用Linq TO XML全部内容,希望文章能够帮你解决在silverlight中使用Linq TO XML所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)