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");
//使用循环的方式进行解析:
更高级一点的用法:
</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 的三种主流技术及介绍——主要转自 IBMhttp://www.ibm.com/developerworks/cn/xml/dm-1208gub/