• c#中对Xml的若干操作


    1.XmlSchema

    有两种方式:

    1.在Dom模型中执行验证

    //XmlDocument doc = new XmlDocument();

    //载入语法
    //doc.Schemas.Add("www.ljzforever.com", "xsd.xsd");

    //载入文档
    //doc.Load("xml.xml");

    //进行验证,并指定验证时出错了后触发的方法
    //doc.Validate(ValidateHandler);

    2.用参数对象执行验证

    XmlReaderSettings set = new XmlReaderSettings();

    //载入语法
    set.Schemas.Add("www.ljzforever.com", "xsd.xsd");

    //验证类型
    set.ValidationType = ValidationType.Schema;

    //指定验证时出错了后触发的方法
    set.ValidationEventHandler += ValidateHandler;

    //将参数对象加载进阅读器
    XmlReader read = XmlReader.Create("xml.xml", set);

    //在加载文档的过程中进行验证
    while (read.Read()){}

    //上面一句或者用:

    //XmlDocument doc = new XmlDocument();
    //doc.Load(read);

    ///验证时出错了后触发的方法

    static void ValidateHandler(object sender, ValidationEventArgs e)
    {
        Console.WriteLine(e.Message);
    }

    2.xslt

    //载入

    XslCompiledTransform tran = new XslCompiledTransform();
    tran.Load("xsl.xsl");

    //准备流
    MemoryStream ms = new MemoryStream();
    XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.UTF8);

    //准备参数
    XsltArgumentList list = new XsltArgumentList();
    list.AddParam("level", "", 3);

    //将结果转入流
    tran.Transform("xml.xml",list, xtw);

    //将流转入字符串
    byte[] buffer = new byte[ms.Length];
    ms.Position = 0;
    ms.Read(buffer, 0, (int)ms.Length);
    Console.WriteLine(System.Text.Encoding.UTF8.GetString(buffer));
    Console.ReadKey();

    上面只是通常情况,如果需要将节点以参数的形式传入xslt的话,就需要引入新的对象了

    //用XPathDocument载入文档

    XPathDocument path = new XPathDocument("xml.xml");

    //创建导航
    XPathNavigator nav = path.CreateNavigator();

    //在导航内选择结点集,是xpath语法
    XPathNodeIterator iter = nav.Select("//emp");

    //将结点集导入参数值

    list.AddParam("level", "", iter);

    3.关于XmlDataDocument对象

    通过XmlDataDocument对象,我们可以与DataSet建立关系,但是在我研究中发现,实际上在这两个对象之间DataSet才是主类,XmlDataDocument主要是起来一个配合作用。(哈哈,个人意件),因为无论任何时候,都要求DataSet加载Schema(架构),不然就不可用啊!

    有三种方式建立两者的关系

    a.先建立DataSet,并加载xml文档,然后在XmlDataDocument的构造函数中建立关系:

    DataSet ds = new DataSet()

    ds.ReadXml("xml.xml");

    XmlDataDocument doc = new XmlDataDocument (ds)

    b.先建立DataSet,并加载xml架构,然后在XmlDataDocument的构造函数中建立关系,最后在XmlDataDocument中加载文档:

    DataSet ds = new DataSet()

    ds.ReadXmlSchema("xsd.xsd");

    XmlDataDocument doc = new XmlDataDocument (ds)

    doc .Load("xml.xml");

    c.先建立XmlDataDocument,然后建立DataSet,并将XmlDataDocument的DataSet属性赋给它,然后DataSet加载架构,最后XmlDataDocument加载文档

    XmlDataDocument doc = new XmlDataDocument (ds)

    DataSet ds = data.DataSet;
    ds.ReadXmlSchema("ds.xsd");
    data.Load("xml.xml");

    总之,不管怎样建立,DataSet都要求有架构,且不能晚于文档加载,必须同时加载或先加载!

    通过引入XmlDataDocument,使DataSet中的数据既可以用ado.net的方式操作,又可以用xml的Dom模型或流模型操作,增强了操作的灵活性。

    注意:

    1.推存使用第三种构造方式,因为这样可以必免 XML 文档的失真。如果 DataSet 是使用 ReadXml 从 XML 文件中填充的,那么当使用 WriteXml 以 XML 文档形式写回数据时,数据可能大大不同于初始的 XML 文档。这是因为 DataSet 不维护 XML 文档中的格式设置(如空白)或分层信息(如元素顺序)。DataSet 也不包含 XML 文档中因为不匹配 Dataset 架构而被忽略的元素。通过使 XmlDataDocumentDataSet 同步,可以在 XmlDataDocument 中维护初始 XML 文档的格式设置和分层元素结构,而 DataSet 仅包含适用于 DataSet 的数据和架构信息。

    2.DataSet都要求有架构,且不能晚于文档加载,必须同时加载或先加载!上面己说明的很详细了

    3.所有使用XmlDocument的地方都可以使用XmlDataDocument ,因为XmlDataDocument 是对XmlDocument的扩展

    参考的文章:

    XmlDataDocument 与Dataset

    http://software.it168.com/manual/asp.net/4-4-6.htm

    使 DataSet 与 XmlDataDocument 同步的示例(节点和字段对应的编程)

    http://www.cnblogs.com/cuihongyu3503319/archive/2007/01/07/614072.html

    高手进来谈一下XmlDataDocument类和DataSet类的区别看看

    http://topic.csdn.net/t/20040920/02/3389023.html

    XmlDocument 与 XmlDataDocument 的区别

    http://www.cftea.com/c/2008/07/Q1DY3YTFNQ8V95LB.asp

    XmlDataDocument 问题

    http://topic.csdn.net/t/20050603/07/4055616.html

    解析.Net框架下的XML编程技术

    http://blog.csdn.net/qdzx2008/archive/2006/04/17/666566.aspx

    请教XmlDataDocument的问题

    http://topic.csdn.net/t/20050420/14/3952062.html

  • 相关阅读:
    C语言-错误处理
    C语言-排序和查找
    PCB设计要点
    C语言-调试
    c++ 概述
    C语言-指针
    C语言-数组与指针 字符与字符串
    C语言-(void*)类型指针
    C语言-字符操作函数
    C语言-链表
  • 原文地址:https://www.cnblogs.com/ljzforever/p/1467796.html
Copyright © 2020-2023  润新知