xml的一些了解

来源:互联网 发布:淘宝宝贝规格不显示 编辑:程序博客网 时间:2024/05/29 09:02

XML(Extensible Markup Language)预研

1.    问题

1.1    什么是XML?

1.2 在什么地方可以用到XML?

1.3 XML有什么作用?

1.4 XML相关的键值对主要表现形式是什么?

1.5 XML的格式是怎样的?

1.6 用户使用XML时有哪些优缺点?

1.7 使用JSON和使用XML相比较,XML的优缺点主要表现在哪里?

2.技术预研

2.1概念

XML(Extensible Markup Languange)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。

2.2简明的语法

2.2.1任何起始标签都必须有一个结束标签。

 <GENGER></GENGER>

2.2.2可以采用加一种简化语法,可以在一个标签中同时表示开始和结束标签。

这种语法是在大于符号之前紧跟一个斜线(/),例如<tag/ >。XML解析器会将其翻译成<tag></tag>。

2.2.3标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签。

例如this is a samplestring。这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。

2.2.4所有的特性都必须有值。

<author gender="" age="21">李赫</author>

2.2.5所有的特性都必须在值的周围加上双引号。

<author gender="" age="21">李赫</author>

2.2基础结构

2.3.1 xml形成了一种树的结构。它从”根部”开始,然后扩展到枝叶。如:

2.3.2获取值

(1)getElementsByTagName() 方法返回包含拥有指定标签名的所有元素的节点列表,其中的元素的顺序是它们在源文档中出现的顺序。

(2)getAttribute() 方法返回属性的值。(获取属性值)

(3)getAttributeNode() 方法返回属性节点。(获取属性值)

 2.4 基础示例

2.4.1在<bookstroe>插入一个节点

XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("bookstore.xml");
XmlNode root=xmlDoc.SelectSingleNode("bookstore");//
查找<bookstore>
XmlElement xe1=xmlDoc.CreateElement("book");//
创建一个<book>节点
xe1.SetAttribute("genre","
李赞红");//配置该节点genre属性
xe1.SetAttribute("ISBN","2-3631-4");//
配置该节点ISBN属性

XmlElement xesub1=xmlDoc.CreateElement("title");
xesub1.InnerText="CS
从入门到精通";//配置文本节点
xe1.AppendChild(xesub1);//
添加到<book>节点中
XmlElement xesub2=xmlDoc.CreateElement("author");
xesub2.InnerText="
候捷";
xe1.AppendChild(xesub2);
XmlElement xesub3=xmlDoc.CreateElement("price");
xesub3.InnerText="58.3";
xe1.AppendChild(xesub3);

root.AppendChild(xe1);//添加到<bookstore>节点中
xmlDoc.Save("bookstore.xml");

结果为:

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberons Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
<book genre="
李赞红" ISBN="2-3631-4">
<title>CS
从入门到精通</title>
<author>
候捷</author>
<price>58.3</price>
</book>
</bookstore>

2.4.2修改节点

genre属性值为李赞红的节点的genre值改为“update李赞红,将该节点的子节点<author>

的文本修改为亚胜

XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的任何子节


foreach(XmlNode xn in nodeList)//
遍历任何子节点
{
XmlElement xe=(XmlElement)xn;//
将子节点类型转换为XmlElement类型
if(xe.GetAttribute("genre")=="
李赞红")//假如genre属性值为李赞红
{
xe.SetAttribute("genre","update
李赞红");//则修改该属性为“update李赞红

XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的任何子节点
foreach(XmlNode xn1 in nls)//
遍历
{
XmlElement xe2=(XmlElement)xn1;//
转换类型
if(xe2.Name=="author")//
假如找到
{
xe2.InnerText="
亚胜";//则修改
break;//
找到退出来就能够了
}
}
break;
}
}

xmlDoc.Save("bookstore.xml");//保存。

最后结果为:

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberons Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
<book genre="update
李赞红" ISBN="2-3631-4">
<title>CS
从入门到精通</title>
<author>
亚胜</author>
<price>58.3</price>
</book>
</bookstore>

2.5 xml优缺点

2.5.1优点

(1)具有良好的格式。标记一定要拥有结尾标记,如:<name>asp.net</name>

(2)具有验证机制

Xml的标记是程序员自己定义的,标记的定义和使用是否符合语法,需要验证。XML有两种验证方法:1)DTD(Document Type Definition),即文档类型定义,DTD是一个专门的文件,用来定义的校验XML文档中的标记;2)XML Schema,用XML语法描述,它比DTD更优越,多个Schema可以复合使用XML名称空间,可能详细定义元素的内容及属性值的数据类型。

(3)灵活的WEB应用。

在XML中,数据和显示格式是分离设计的,HTML提供显示的内容,而XML描述数据本身。

(4 )丰富的显示样式。

XML数据定义打印、显示排版信息主要有三种方法:1)用CSS定义打印和显示排版信息;2)用XSLT转换到HTML进行显示和打印;3)用XSLT转换成XSL的FO(Formatter Object)进行显示和打印

(5)XML是电子数据交换(EDI)的格式。

XML是为互联网的数据交换而设计,它不仅仅是SGML定义的用于描述的文档,而且在电子商务等各个领域使用数据交换成为可能。

(6)便捷的数据处理。

XML可以很方便地与数据库中的表进行相互转换。XML使计算机能够很简易地读取和存储资料,并确保数据结构精确。

(7)面向对象的特性。

XML是信息的对象化语言。DTD和Schema是界面和类(interface和class),XML是对象实例(object),XSL是方法和实现(Method和Implement).XML-Data解决了XML类的继承问题。

(8)开放的标准

XML基于的标准是为WEB进行优化的。由于XML彻底把标识的概念同显示公开了,处理者能够在结构化的数据中嵌套程序化的描述以表明如何显示数据。XML是信息的高层封装与运输的标准。

(9)选择性更新。

能过XML,数据可以在选择的局部小范围内更新。每当一部分数据变化后,不需要重发整个结构化的数据。

(10)XML是一个技术大家族。

XML是一套完整的方案,有一系列相关技术,包括文件数据校验、显示输出、文件转换、文档对象和连接等。

2.5.2缺点

 (1)树状存储。

虽然搜索效率极高,但是插入和修改比较困难。

(2)大数据量低效率。

 XML的文本表现手法、标记的符号化会导致XML数据比二进制表现数据量增加,尤其当数据量很大的时候,效率就成为很大的问题。

(3)管理功能不完善。

XML文档做为数据提供着使用,没有数据库系统那样完的的管理功能。

(4)通信难。

由于XML是元置标语言,任何人、公司和组织都可以利用它定义新的标准,这些标准间的通信就成了巨大的问题。

2.5.3xml和json优缺点的比较

 (1)   在可读性方面,JSON和XML的数据可读性基本相同。JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。

(2)   在可扩展性方面,XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。

(3) 在编码难度方面,XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。

(4)  在解码难度方面,XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。

(5)  在流行度方面,XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了。

(6)  JSON和XML同样拥有丰富的解析手段。

(7)  JSON相对于XML来讲,数据的体积小。

(8)    JSON与JavaScript的交互更加方便。

(9)  JSON对数据的描述性比XML较差。

(10) JSON的速度要远远快于XML

2.6代码

2.6.1属性设置在嵌套中

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

<BOOKSTORE>

<!--这是个简单的XML代码-->

  <BOOKNAME>语文

  <AUTHOR>张小後

  <GENGER></GENGER>

    <AGE>33</AGE>

  </AUTHOR>

  <DATA>2012-3-9</DATA>

  </BOOKNAME>

  <BOOKNAME>数学

  <AUTHOR>

    李小路

    <GENGER>D</GENGER>

    <AGE>23</AGE>

  </AUTHOR>

  <DATA>2011-3-9</DATA>

  </BOOKNAME>

  <BOOKNAME>英语

  <AUTHOR>

    宁夏

    <GENGER></GENGER>

    <AGE>24</AGE>

  </AUTHOR>

  <DATA>2003-3-9</DATA>

  </BOOKNAME>

  <BOOKNAME>社会科学

  <AUTHOR>

    张红

    <GENGER></GENGER>

    <AGE>31</AGE>

  </AUTHOR>

  <DATA>2011-3-9</DATA>

  </BOOKNAME>

  <BOOKNAME>??¨²

  <AUTHOR>

    姚依

    <GENGER></GENGER>

    <AGE>33</AGE>

  </AUTHOR>

  <DATA>2001-3-9</DATA>

  </BOOKNAME>

  <BOOKNAME>C#

  <AUTHOR>

    史吴

    <GENGER></GENGER>

    <AGE>34</AGE>

  </AUTHOR>

  <DATA>2010-3-9</DATA>

  </BOOKNAME>

</BOOKSTORE>

2.6.2属性设置字段内部

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

<bookstore>

<!--这是个简单的XML代码-->

<book>

<title>鱼香〈肉丝1&lt;2是怎样做成的?

</title>

<author gender="" age="22">李哲</author>

<year>2022</year>

<price>22</price>

</book>

<book>

<title>宫保鸡丁是怎样做成的</title>

<author gender="" age="21">李赫</author>

<year>3333</year>

<price>33</price>

</book>

<book>

<title>京酱肉丝是怎样做成的</title>

<author gender="" age="20">王蕾</author>

<year>4444</year>

<price>44</price>

</book>

</bookstore>

2.6.3动态生成xml文件

         XElement xmlbookstore = new XElement("bookstroe");

            XElement xmlbook = new XElement("book");

            XElement xmltitle = new XElement("title", "鱼香〈肉丝?1&lt是怎样做成的");

            XElement xmlauthor = new XElement("author", "?¤?");

            xmlauthor.SetAttributeValue("getder", "?");

            xmlauthor.SetAttributeValue("age", "23");

            XElement xmlyear = new XElement("year", "2000");

            XElement xmlprice = new XElement("price", "30");

            xmlbook.Add(xmltitle);

            xmlbook.Add(xmlauthor);

            xmlbook.Add(xmlyear);

            xmlbook.Add(xmlprice);

            xmlbookstore.Add(xmlbook);

            System.IO.FileStream stream = File.OpenWrite(@"F:王媛媛\\JSONXML\\JSONXML\\JSONXML\\菜谱1.xml");

            StreamWriter writer = new StreamWriter(stream);

            writer.WriteLine(xmlbookstore.ToString());

            writer.Flush();

            stream.Dispose();

            ClientScript.RegisterStartupScript(this.GetType(), " ", "<script>alert('动态生成成功!')</script>");

2.6.4 xml文件导入数据库

string strcon = ConfigurationManager.ConnectionStrings["strcon"].ConnectionString;

            SqlConnection conn = new SqlConnection(strcon);

            SqlCommand comm = conn.CreateCommand();

            comm.CommandText = "insert into xmltable_1 values(@ypid,@ypmc,@parentid)";

            conn.Open();

            FileStream files = File.OpenRead(Server.MapPath(@"Druplist.xml"));

            XDocument docuement = XDocument.Load(files);

            string ypmc = string.Empty;

            string ypid = string.Empty;

            string parentid = string.Empty;

            foreach (XElement element in docuement.Root.Descendants("Item"))

            {

                comm.Parameters.Clear();

                ypmc = element.Attribute("Title").Value;

                ypid = element.FirstNode.ToString();

                ypid = ypid.Substring(9, ypid.Length - 9 - 3);

                if (ypmc == "西药" || ypmc == "中成¦" || ypmc == "中草药")

                {

                    parentid = "0";

                }

                else

                {

                    parentid = element.Parent.FirstNode.ToString();

                    parentid = parentid.Substring(9, parentid.Length - 12);

                }

                comm.Parameters.AddWithValue("@ypid", ypid);

                comm.Parameters.AddWithValue("@ypmc", ypmc);

                comm.Parameters.AddWithValue("@parentid", parentid);

                comm.ExecuteNonQuery();

            }

            comm.Dispose();

            conn.Dispose();

            Response.Write("插入成¨");

2.6.5数据库导出xml文件

string strcon = ConfigurationManager.ConnectionStrings["strcon"].ConnectionString;

            using (SqlConnection conn=new SqlConnection (strcon))

            {

                using (SqlCommand comm=conn.CreateCommand())

                {

                    comm.CommandText = "select ypid,ypmc,prientid from xmltable_1";

                    SqlDataAdapter da = new SqlDataAdapter(comm);

                    DataSet ds = new DataSet();

                    da.Fill(ds);

                    DataTable dt = ds.Tables[0];

                    XElement xmlmenu = new XElement("Menu");

                    for (int i = 0; i < dt.Rows.Count; i++)

                    {

                        XElement xmltitle = new XElement("Title", dt.Rows[i]["ypmc"].ToString());

                        //xmltitle.SetAttributeValue("ID", dt.Rows[i]["ypid"].ToString());

                        xmlmenu.Add(xmltitle);

                        XElement xmlID = new XElement("ID", dt.Rows[i]["ypid"].ToString());

                        xmlmenu.Add(xmlID);

                    }

                   // FileStream stream = File.OpenWrite("F:\\ª???\\JSON®?XML\\JSON®?XML\\JSON®?XML\\Druplist1.xml");

                    //StreamWriter writer = new StreamWriter(stream);

                    //writer.WriteLine('<?xml version="1.0" encoding="utf-8"?>');

                    //writer.WriteLine(xmlmenu);

                    //writer.Flush();

                    //stream.Dispose();

                    

 

                     xmlmenu.Save("F:\\ª???\\JSON®?XML\\JSON®?XML\\JSON®?XML\\Druplist1.xml");

                   

                    ClientScript.RegisterStartupScript(this.GetType()," ","<script>alert('导出成功')</script>");

                }

            }

 

原创粉丝点击