在silverlight中使用Linq TO XML

在silverlight中使用Linq TO XML,第1张

概述     本DEMO演示了在silverlight 2(Beta1) 中使用Linq TO XML。流程是通过使用 WebClient 将XML以流的方式 抓到本地,然后再用XmlReader 进行读取.最终使用Linq To XML 将查询到的数据转成对象列表:)      本文中所使用的XML中的数据取自SQLSERVER自带的数据库NorthWind中的Customers表,通过使用如下SQ      本DEMO演示了在silverlight 2(Beta1) 中使用linq TO XML。流程是通过使用 WebClIEnt 将XML以流的方式
抓到本地,然后再用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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1055797.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存