Silverlight操作XML文件

转载 2012年03月21日 09:10:15

四、     编写XML文档

.NET System.XML命名空间下提供的一些类库使得开发人员可以很方便的对XML进行读、写、查。

XmlTextWriter类允许你将XML写到一个文件中去。这个类包含了很多方法和属性,使用这些属性和方法可以使你更容易地处理XML。下表是XmlTextWriter的方法:

方法名

功能描述

WriteStartDocument

版本为“1.0”的 XML 声明

WriteEndDocument

关闭任何打开的元素或属性

Close

关闭此流和基础流

WriteDocType

写出具有指定名称和可选属性的 DOCTYPE 声明

WriteStartElement

写出具有指定的本地名称的开始标记

WriteEndElement

关闭任何打开的元素或属性

WriteFullEndElement

关闭一个元素,并且总是写入完整的结束标记

WriteElementString

写出包含字符串值的元素

WriteStartAttribute

书写属性的起始内容

WriteEndAttribute

关闭上一个 WriteStartAttribute 调用

WriteRaw

手动书写原始标记

WriteString

书写一个字符串

WriteAttributeString

出具有指定值的属性

WriteCData

写出包含指定文本的 <![CDATA[...]]> 块

WriteComment

写出包含指定文本的注释 <!--...-->

WriteWhiteSpace

写出给定的空白

WriteProcessingInstruction

写出在名称和文本之间带有空格的处理指令,如下所示:<?name text?>

下例是用XmlTextWriter类写的一个简单XML文档:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Xml;

 

namespace XML

{

    class Program

    {

        static void Main(string[] args)

        {

            XmlTextWriter writer = new XmlTextWriter("demo.xml", Encoding.UTF8);

            //设置自动换行缩进

            writer.Formatting = Formatting.Indented;

            //XML版本声明

            writer.WriteStartDocument();

            //根元素

            writer.WriteStartElement("Student");

            //扩展子元素,这里只写了2个

            writer.WriteElementString("Name", "长江");

            writer.WriteElementString("Name", "黄河");

            //关闭根元素,并书写结束标签

            writer.WriteEndElement();

            //将XML写入文件并且关闭XmlTextWriter实例对象

            writer.Close();

        }

    }

}

运行后,会在项目根目录/bin/debug文件夹下生成demo.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>

<Student>

  <Name>长江</Name>

  <Name>黄河</Name>

</Student>

下面例子,我们增加一些XmlTextWriter类中的方法的应用:

XmlTextWriter writer = new XmlTextWriter("book.xml", null);

writer.WriteStartDocument();

//设置自动缩进

writer.Formatting = Formatting.Indented;

//根元素

writer.WriteStartElement("Books");

//第一个元素

writer.WriteStartElement("Book");

//向先前创建的元素中添加一个属性

writer.WriteAttributeString("BookName", ".NET框架");

//添加子元素

writer.WriteElementString("Author", "Jim");

writer.WriteElementString("Price", "40.00");

//关闭item元素

writer.WriteEndElement(); // 关闭元素

//在节点间添加一些空格

writer.WriteWhitespace("\n");

//使用原始字符串书写第二个元素

writer.WriteRaw("<Book BookName=\"C#\">" +

    "<Author>Tom</Author>" +

    "<Price>60.00</Price>" +

    "</Book>");

//使用格式化的字符串书写第三个元素

writer.WriteRaw("\n <Book BookName=\"ASP.NET\">\n" +

    "    <Author>David</Author>\n" +

    "    <Price>100.00</Price>\n" +

    " </Book>\n");

// 关闭根元素

writer.WriteFullEndElement();

//将XML写入文件并关闭writer

writer.Close();

运行代码后生成的XML文件代码如下:

<?xml version="1.0"?>

<Books>

  <Book BookName=".NET框架">

    <Author>Jim</Author>

    <Price>40.00</Price>

  </Book>

<Book BookName="C#"><Author>Tom</Author><Price>60.00</Price></Book>

 <Book BookName="ASP.NET">

    <Author>David</Author>

    <Price>100.00</Price>

 </Book>

</Books>

五、     XML读、查、删

上面我们学习了用XmlTextWriter对象创建一个XML文档,在本节里,将继续介绍如何在已有XML文档中查询和插入节点。下面示例在book.xml根节点下加入新的<Book>节点:

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load("book.xml");

//查找<Books>

XmlNode root = xmlDoc.SelectSingleNode("Books");

//创建一个<Book>节点

XmlElement el = xmlDoc.CreateElement("Book");

//设置<Book>节点的属性BookName

el.SetAttribute("BookName", "Windows Application");

//创建<Book>节点的第一个下级节点

XmlElement elSubAuthor = xmlDoc.CreateElement("Author");

elSubAuthor.InnerText = "Jack";

el.AppendChild(elSubAuthor);

//创建<Book>节点的第二个下级节点

XmlElement elSubPrice = xmlDoc.CreateElement("Price");

elSubPrice.InnerText = "70.00";

el.AppendChild(elSubPrice);

//添加<Book>节点到<Books>中

root.AppendChild(el);

xmlDoc.Save("book.xml");

运行代码后,book.xml代码如下,加粗部分是新增的代码:

<?xml version="1.0"?>

<Books>

  <Book BookName=".NET框架">

    <Author>Jim</Author>

    <Price>40.00</Price>

  </Book>

  <Book BookName="C#">

    <Author>Tom</Author>

    <Price>60.00</Price>

  </Book>

  <Book BookName="ASP.NET">

    <Author>David</Author>

    <Price>100.00</Price>

  </Book>

  <Book BookName="Windows Application">

    <Author>Jack</Author>

    <Price>70.00</Price>

  </Book>

</Books>

下面示例演示了如何修改XML节点:

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load("book.xml");

XmlNodeList nodeList = xmlDoc.SelectSingleNode("Books").ChildNodes;

foreach (var node in nodeList)

{

    XmlElement el = (XmlElement)node;

    if (el.GetAttribute("BookName") == "C#")

    {

        el.SetAttribute("BookName", "精通C#");

    }

}

xmlDoc.Save("book.xml");

如果要输出book.xml文档中所有节点的属性和值,可以尝试在上例foreach中实现。

运行后,book.xml的代码如下,原来的“C#”被更改为了“精通C#”。

<?xml version="1.0"?>

<Books>

  <Book BookName=".NET框架">

    <Author>Jim</Author>

    <Price>40.00</Price>

  </Book>

  <Book BookName="精通C#">

    <Author>Tom</Author>

    <Price>60.00</Price>

  </Book>

  <Book BookName="ASP.NET">

    <Author>David</Author>

    <Price>100.00</Price>

  </Book>

  <Book BookName="Windows Application">

    <Author>Jack</Author>

    <Price>70.00</Price>

  </Book>

</Books>

如果要删除节点属性请使用RemoveAttribute方法,如果要删除节点请使用RemoveChild方法,也可以使用RemoveAll方法删除所有节点。关于这类方法的使用不再赘述。


另外DataSet也可以读写XML文件:

DataSet ds = new DataSet();
//方法有重载
ds.ReadXml(Server.MapPath("txt.xml"));
//方法有重载
ds.WriteXml(Server.MapPath("txt.xml"));

将字符串保存为XML文件

XmlDocument doc = new XmlDocument();  
doc.LoadXml(txtXMLEditor.Text);
doc.Save(Server.MapPath(
"XMLFile.xml")); 


C#创建XML文档、增删节点类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;
namespace OperateXml
{
    
public class XmlHelper
    {
        
/// <summary>
        
/// 创建XML文件
        
/// </summary>
        
/// <param name="fileName">XML文件路径和文件名</param>
        
/// <param name="rootElement">XML文件根元素名称</param>
        public static void CreateXmlFile(string fileName,string rootElement)
        {
            
if (!File.Exists(fileName))
            {
                
//创建Xml文件
                XmlTextWriter writer = new XmlTextWriter(fileName, Encoding.UTF8);
                
//设置自动缩进
                writer.Formatting = Formatting.Indented;
                
//XML版本声明
                writer.WriteStartDocument();
                
//根元素
                writer.WriteStartElement(rootElement);
                
//关闭根元素,并书写结束标签
                writer.WriteEndElement();
                
//将XML写入文件并且关闭XmlTextWriter实例对象
                writer.Close();
            }
        }

        
/// <summary>
        
/// 添加XML数据
        
/// </summary>
        
/// <param name="fileName">XML文件路径和文件名</param>
        
/// <param name="rootElement">XML文件根元素名称</param>
        
/// <param name="itemElement">XML文件二级元素名称</param>
        
/// <param name="childElement">XML文件三级元素名称和值</param>
        public static void AppendChildElement(string fileName, string rootElement,string itemElement, Dictionary<string,string> childElement)
        {
            XmlDocument xmlDoc 
= new XmlDocument();
            xmlDoc.Load(fileName);
            XmlNode root 
= xmlDoc.SelectSingleNode(rootElement);
            XmlElement el 
= xmlDoc.CreateElement(itemElement);
            
foreach(var item in childElement)
            {
                XmlElement elChild 
= xmlDoc.CreateElement(item.Key);
                elChild.InnerText 
= item.Value;
                el.AppendChild(elChild);
            }

            root.AppendChild(el);
            xmlDoc.Save(fileName);
        }
        
/// <summary>
        
/// 删除数据行
        
/// </summary>
        
/// <param name="fileName">XML文件</param>
        
/// <param name="rowNode">顶级节点</param>
        
/// <param name="elementID">要查找的三级节点的InnerText,根据此值删除二级节点(一条数据)</param>
        public static void RemoveRecord(string fileName,string rowNode,string elementID)
        {
            XmlDocument xmlDoc 
= new XmlDocument();
            xmlDoc.Load(fileName);
            XmlNodeList nodeList 
= xmlDoc.SelectSingleNode(rowNode).ChildNodes;
            
foreach (XmlNode node in nodeList)
            {
                XmlElement el 
= (XmlElement)node;
                XmlNodeList nodeListChild 
= el.ChildNodes;
                
foreach (XmlNode nodeChild in nodeListChild)
                {
                    
if (nodeChild.InnerText == elementID)
                    {
                        xmlDoc.SelectSingleNode(rowNode).RemoveChild(node);
                        
break;
                    }
                }
            }
            xmlDoc.Save((fileName));
        }
    }
}

Silverlight实现文件的下载[很简单]

思路:使用HyperlinkButton的NavigateUri属性来访问ashx程序,来实现文件下载。 一. 新建一个Silverlight应用程序 在web项目所在的目录下新建名为Files的...
  • dangercheng
  • dangercheng
  • 2013年11月25日 16:54
  • 2863

Silverlight 运行原理 解析综合版(二)

Silverlight 运行原理 解析综合版(二) 2011-10-09 21:05 by 沐海, 564 阅读, 0 评论, 收藏,  编辑 几种RIA技术 Silverlig...
  • david_xgl
  • david_xgl
  • 2014年08月29日 18:31
  • 918

silverlight根据json字符串动态创建实体类

1、接收json字符串: //用JsonValue转换json字符串是为了之后获得json字符串的每行数据和每一列的列名 JsonValue jv = JsonValue.Parse(json);...
  • mutou965175859
  • mutou965175859
  • 2015年07月10日 13:22
  • 1657

Silverlight 控件的ToolTip封装工具使用

在Silverlight项目开发中,控件可以设置鼠标移入时的手势,同样还可以设置ToolTip,利用Silverlight编写代码或者Blend设计工具均可以设置ToolTip,但都是一些文字提示,如...
  • taomanman
  • taomanman
  • 2015年08月27日 09:52
  • 1240

silverlight学习之路(1)创建 RIA Services 解决方案

学习过程真的很悲剧啊! 开发工具:VS2012+silverlight5
  • duyelang
  • duyelang
  • 2014年07月22日 14:50
  • 808

强制客户端更新Silverlight XAP文件方法汇总

原文地址: http://www.cnblogs.com/jv9/archive/2012/07/17/2595015.html http://www.cnblogs.com/yjmyzz/ar...
  • DJ2008
  • DJ2008
  • 2016年03月17日 09:02
  • 955

如何将HTML或aspx页面嵌入到Silverlight中

怎么在Silverlight中嵌入其他页面如:html,aspx或jsp页面,这里写一个简单的使用方法,供大家参考: 下载第三方控件的dll,这里提供一个下载。   下面是这个工具的...
  • deepwishly
  • deepwishly
  • 2014年07月18日 17:48
  • 899

Silverlight管理系统-源代码(SilverlightOA开发框架主要提供二次开发)

 Silverlight OA系统简介 系统功能简介 l 程序界面介绍: 左侧为主菜单,主菜单可以展开和收起,主菜单下面的所有模块都可以在数据库中扩展增加,模块的权限和用户角色挂钩,可以在...
  • dotfun
  • dotfun
  • 2014年05月14日 14:38
  • 7977

完美实现Silverlight动态加载

这段时间利用项目空隙,研究了一下Silverlight的动态加载技术。动态加载分为两种: 1、网页局部加载(即一个网页上有多个Silverlight应用) 2、单个Silverlight应用动态加...
  • Andeewu
  • Andeewu
  • 2013年11月18日 22:44
  • 1272

更新Silverlight 后 无法启动调试 未安装Silverlight developer 运行时解决办法

更新Silverlight 后 无法启动调试 未安装Silverlight developer 运行时解决办法 时间:2012-08-14 18:27来源:博客园 作者:风_铃 点击: 883次 ...
  • fxhflower
  • fxhflower
  • 2013年09月17日 10:42
  • 5058
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Silverlight操作XML文件
举报原因:
原因补充:

(最多只允许输入30个字)