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>
<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));
}
}
}
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();
}
{
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);
}
}
{
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文档到服务器
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();
}
}
{
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();
}
}