zlb

Silverlight中使用xml文件(xml文件保存,节点的添加,删除)

我的xml文件

代码
<?xml version="1.0" encoding="utf-8" ?>
<Pushpins>
  
<Pushpin>
    
<ID>bcab6565-f1c7-4ee3-88a1-ab3115112ca5</ID>
    
<Title>nn</Title>
    
<Description>mmmm</Description>
    
<VELatLongLatitude>37.814344816897488</VELatLongLatitude>
    
<VELatLongLongitude>112.31771841645201</VELatLongLongitude>
  
</Pushpin>
  
<Pushpin>
    
<ID>641f277b-da9c-4291-832f-700777a6c9b5</ID>
    
<Title>www</Title>
    
<Description>wwwww</Description>
    
<VELatLongLatitude>34.4796226939071</VELatLongLatitude>
    
<VELatLongLongitude>108.88998404145201</VELatLongLongitude>
  
</Pushpin>
</Pushpins>

 

在silverlight页面中添加引用

using System.Xml;
using System.Xml.Linq;

 

使用 LINQ to XML 从任意 URI 位置加载 XML 文件,代码如下

代码
 string uriString = "../XMLData/XMLMapsPushpin.xml";
        XDocument xDoc 
= null;
        
//使用 LINQ to XML 从任意URI 位置加载 XML 文件
        private void LoadXmlData()
        {
            WebClient wc 
= new WebClient();
            wc.OpenReadCompleted 
+= wc_OpenReadCompleted;
            wc.OpenReadAsync(
new Uri(uriString, UriKind.Relative));
        }
        
private void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            
if (e.Error != null)
            {
                
//OutputTextBlock.Text = e.Error.Message;
                return;
            }
            
using (Stream s = e.Result)
            {
                xDoc 
= XDocument.Load(s);

                
this.spPushpin.Children.Clear();
                
foreach (var c in xDoc.Descendants("Pushpin"))
                {
                    
//添加图钉到地图上 PushPinControl 是一个自定义控件
                    PushPinControl pushpin = new PushPinControl();
                    pushpin.Title 
= c.Element("Title").Value;
                    pushpin.Remark 
= c.Element("Description").Value;
                    pushpin.Tag 
= c.Element("ID").Value;
                    
double x =double.Parse(c.Element("VELatLongLatitude").Value);
                    
double y = double.Parse(c.Element("VELatLongLongitude").Value);
                    myMapLayer.AddChild(pushpin, 
new Location(x, y));
                }
            }
        }

 

删除xml文件中的节点,代码如下:

代码
private void DelXmlElement ()
{
IEnumerable
<XElement> qurey =
                    from item 
in xDoc.Root.Elements()
                    
where item.Element("ID").Value =="aaa"
                    select item;
                qurey.Remove();
}

 

 

xml文件中添加节点:

代码
private void AddXmlElement()
{
if(xDoc==null )
                {                  
                    xDoc 
= new XDocument( new XDeclaration("1.0""utf-8""yes"),
                                                    
new XElement("Pushpins"));
                }
                
if (xDoc != null)
                {
                    XElement newPushpin 
= new XElement("Pushpin",
                            
new XElement("ID",ID),
                            
new XElement("Title", pushpin.Title),
                            
new XElement("Description", pushpin.Remark),
                            
new XElement("VELatLongLatitude", CurrentLocation.Latitude),
                            
new XElement("VELatLongLongitude", CurrentLocation.Longitude)     
                       );
                    xDoc.Root.Add(newPushpin);                   
                }
 }

 

保存xml文档到服务器指定的位置:

代码
#region 保存xml文档到服务器
        
private void Button_SaveXml(object sender, RoutedEventArgs e)
        {
            WebClient webClient 
= new WebClient();
            webClient.OpenWriteCompleted 
+= new OpenWriteCompletedEventHandler(webClient_OpenWriteCompleted);
            webClient.OpenWriteAsync(
new Uri("/WebSaveXmlFile.aspx?filename=XMLMapsPushpin.xml",UriKind.Relative));
        }
        
void webClient_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
        {
            Stream outputStream 
= e.Result;
            
string str = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
            
string outString = str + xDoc.ToString();
            
byte[] fileContent = Encoding.UTF8.GetBytes(outString);            
            outputStream.Write(fileContent, 
0, fileContent.Length);
            
//No need to flush.
            outputStream.Close();
            MessageBox.Show(
"保存成功!");
        }
        
#endregion 保存xml文档到服务器

 

服务器端asp.net页面代码:

代码
protected void Page_Load(object sender, EventArgs e)
        {
            
string fileName = Request.Params["filename"];
            
if (!string.IsNullOrEmpty(fileName))
            {
                Stream inputStream 
= Request.InputStream;
                FileStream fileStream 
= File.Create(Server.MapPath("~"+ "\\XMLData\\" + fileName);
                
byte[] fileContent = new byte[inputStream.Length];
                inputStream.Read(fileContent, 
0, fileContent.Length);
                fileStream.Write(fileContent, 
0, fileContent.Length);
                fileStream.Flush();
                fileStream.Close();
                inputStream.Close();
                
//No need to respond.
                Response.Clear();
                Response.End();
            }
        }

 

 

 

 

posted on 2010-05-06 20:27  zlb  阅读(1053)  评论(0编辑  收藏  举报

导航