XML处理技术

Posted 国土飞扬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML处理技术相关的知识,希望对你有一定的参考价值。

XML处理技术

一、js中使用DOM解析XML文件

1. 加载xml文件

xmlDoc =new ActiveXObject("Microsoft.XMLDOM");

xmlDoc.async= "false";

   xmlDoc.load("stu.xml");

代码解释:

·第一行创建空的微软 XML 文档对象

·第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本

·第三行告知解析器加载名为 "books.xml" 的文档

 

2. 解析节点

         x= xmlDoc.getElementsByTagName("student")[0];//解析第一个student

        y=x.childNodes[0];  //解析第一个student的第一个元素,也就是stuid

        document.write(y.nodeName);

3. 解析节点中的文本

document.write(xmlDoc.getElementsByTagName("stuid")[i].text);

document.write(xmlDoc.getElementsByTagName("stuname")[i].text);

document.write(xmlDoc.getElementsByTagName("stusex")[i].text);

或者使用:

document.writeln(y.childNodes[0].nodeValue);

使用循环的方式进行解析:

  <script>

        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");

         xmlDoc.async = "false";

         xmlDoc.load("stu.xml");

       

        //使用循环的方式进行解析:

              for (var i = 0; i    < xmlDoc.getElementsByTagName("student").length;    i++) {

               document.write(xmlDoc.getElementsByTagName("stuid")[i].text);

               document.write(xmlDoc.getElementsByTagName("stuname")[i].text);

               document.write(xmlDoc.getElementsByTagName("stusex")[i].text);

 

            document.write("<br>");

        }

 

        更高级一点的用法:

      

      var x    = xmlDoc.getElementsByTagName("student");

        for    (var i = 0; i < x.length; i++) {

//               document.write(x[i].childNodes.length);

            //            document.write(x[i].childNodes[0].text);

            for    (var j = 0; j < x[i].childNodes.length;    j++) {

                   document.writeln(x[i].childNodes[j].text);

            }

            document.write("<br>");

 

 

          </script>

 

使用循环也可以用下面的方式:

  k = xmlDoc.getElementsByTagName("student");   //k表示所有的student节点

        for (var i = 0; i <  k.length; i++) {

            x = k[i];

            for (var j = 0; j <  x.childNodes.length; j++) {

                y  = x.childNodes[j];

                document.writeln(y.childNodes[0].nodeValue)

            }

             document.write("<br>");

        }

 

用递归的方式读取:

<script  type="text/javascript">

        var xmlDoc = new  ActiveXObject("Microsoft.XMLDOM");

        xmlDoc.load("test3.xml");

 

        var root =  xmlDoc.selectSingleNode("//class");

        displayTree(root);

        function displayTree(currentNode) {

            //显示当前元素的名称

             document.writeln(currentNode.nodeName+"<br>");

 

            //获取子节点

            var childs = currentNode.childNodes;

 

            //如果没有子节点了,就显示文本

            if (childs.length == 1) {

                 document.writeln(currentNode.text + "<br>");

                return;

            }

 

            //如果还有子节点,则继续调用当前方法

            for (var i = 0; i < childs.length;  i++) {

                displayTree(childs.item(i));

            }

        }

    </script>

 

二、使用.net技术读取XML文件

直接读取:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Xml;

 

namespace ConsoleApplication1

{

    class  Program

    {

        static  void Main(string[]  args)

        {

            XmlDocument xmlDoc = new  XmlDocument();

            xmlDoc.Load(@"E:\SVSE1605\xml\4\test3.xml");

 

            //读取XML数据

            //读取第一个学生信息xmlDoc.DocumentElement.ChildNodes[0]  代表第一个学生

            //xmlDoc.DocumentElement.ChildNodes[0].ChildNodes[0]代表第一个学生的第一个子元素,也就是stuid

            Console.WriteLine(xmlDoc.DocumentElement.ChildNodes[0].Name);

            Console.WriteLine(xmlDoc.DocumentElement.ChildNodes[0].ChildNodes[0].InnerText);

            Console.WriteLine(xmlDoc.DocumentElement.ChildNodes[0].ChildNodes[1].InnerText);

            Console.WriteLine(xmlDoc.DocumentElement.ChildNodes[0].ChildNodes[2].InnerText);

 

            //读取第二个学生信息

            Console.WriteLine(xmlDoc.DocumentElement.ChildNodes[1].ChildNodes[0].InnerText);

            Console.WriteLine(xmlDoc.DocumentElement.ChildNodes[1].ChildNodes[1].InnerText);

            Console.WriteLine(xmlDoc.DocumentElement.ChildNodes[1].ChildNodes[2].InnerText);

        }

    }

}

使用循环的方法读取

for (int i = 0; i <  xmlDoc.DocumentElement.ChildNodes.Count; i++)

            {

              Console.WriteLine(xmlDoc.DocumentElement.ChildNodes[i].ChildNodes[0].InnerText);

            Console.WriteLine(xmlDoc.DocumentElement.ChildNodes[i].ChildNodes[1].InnerText);

            Console.WriteLine(xmlDoc.DocumentElement.ChildNodes[i].ChildNodes[2].InnerText);

            }

或者使用:

for (int i = 0; i <  xmlDoc.DocumentElement.ChildNodes.Count; i++)

   {

       for (int j = 0; j  < xmlDoc.DocumentElement.ChildNodes[i].ChildNodes.Count; j++)

         {

           Console.WriteLine(xmlDoc.DocumentElement.ChildNodes[i].ChildNodes[j].InnerText);

           }

}

如果希望使用的范围更多,可以把结果存储在集合中

using System;

using  System.Collections.Generic;

using  System.Linq;

using  System.Text;

 

using  System.Xml;

using System.Collections;

 

namespace  ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            XmlDocument xmlDoc = new  XmlDocument();

             xmlDoc.Load(@"E:\SVSE1605\xml\4\test3.xml");

 

            List<student> stus = new  List<student>();

            for (int i = 0; i <  xmlDoc.DocumentElement.ChildNodes.Count; i++)

            {

                student stu = new student();

                stu.StuId =  xmlDoc.DocumentElement.ChildNodes[i].ChildNodes[0].InnerText;

                stu.StuName =  xmlDoc.DocumentElement.ChildNodes[i].ChildNodes[1].InnerText;

                stu.StuSex =  xmlDoc.DocumentElement.ChildNodes[i].ChildNodes[2].InnerText;

                stus.Add(stu);

            }

        }

    }

 

    class student

    {

        public string StuId { get; set; }

        public string StuName { get; set; }

        public string StuSex{ get;set;}

    }

}

集合的数据可以直接打印出来,也可以放在绑定控件中

 

课后练习:

1.      把下面的XML文件使用js读取到html文件中

(js读取节点属性:节点.getAttribute("属性名"))

2.      创建一个ASP.NET应用程序,把XML文件读取到gridview控件中显示

(读取节点内容使用innerText,读取属性使用attribute,例如  节点.Attributes["id"].Value

<?xmlversion="1.0"encoding="utf-8"?>

<booklist>

  <bookisbn="7-121-0168-2">

    <name>我的生活</name>

    <type>文学</type>

    <author>克林顿</author>

    <publish>国际机械</publish>

  </book>

<bookisbn="7-121-0168-3">

    <name>活着</name>

    <type>文学</type>

    <author>余华</author>

    <publish>清华大学出版社</publish>

  </book>

</booklist>

 


以上是关于XML处理技术的主要内容,如果未能解决你的问题,请参考以下文章

Java处理xml格式的文件或字符串使用哪些技术

收藏用--切勿转载Java处理XML的三种主流技术及介绍

Java 处理 XML 的三种主流技术及介绍

《信息安全技术 XML数字签名语法与处理规范》全文

Java 处理 XML 的三种主流技术及介绍——主要转自 IBMhttp://www.ibm.com/developerworks/cn/xml/dm-1208gub/

java 处理xml 有很多方法,都学太累 哪一种方法比较通用、比较好