DOM dom4j解析xml文件 xml 文件无缘无故变大,如何解决

坚持,还是坚持,最难的就是坚持,能坚持两年就算胜利
5、使用DOM解析XML文档
DOM:Document Object Model (文档对象模型)
1、DOM与SAX
W3C制定了一套书写XML分析器的标准接口规范--DOM。除此之外,XML_DEV邮件列表中的成员根据应用的需求也自发地定义了一套对XML文档进行操作的接口规范--SAX。这两种接口规范各有侧重,互有长短,应用都比较广泛。;XML应用程序不是直接对XML文档进行操作的,而是首先由XML分析器对XML文档进行分析,然后,应用程序通过XML分析器所提供的DOM接口或SAX接口对分析结果进行操作,从而间接地实现了对XML文档的访问。
2、DOM的全称是Document Object Model,也即文档对象模型。在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,因此,这种利用DOM接口的机制也被称作随机访问机制。
DOM接口提供了一种通过分层对象模型来访问XML文档信息的方式,这些分层对象模型依据XML的文档结构形成了一棵节点树。无论XML文档中所描述的是什么类型的信息,即便是制表数据、项目列表或一个文档,利用DOM所生成的模型都是节点树的形式。也就是说,DOM强制使用树模型来访问XML文档中的信息。由于XML本质上就是一种分层结构,所以这种描述方法是相当有效的。
DOM树所提供的随机访问方式给应用程序的开发带来了很大的灵活性,它可以任意地控制整个XML文档中的内容。然而,由于DOM分析器把整个XML文档转化成DOM树放在了内存中,因此,当文档比较大或者结构比较复杂时,对内存的需求就比较高。而且,对于结构复杂的树的遍历也是一项耗时的操作。所以,DOM分析器对机器性能的要求比较高,实现效率不十分理想。不过,由于DOM分析器所采用的树结构的思想与XML文档的结构相吻合,同时鉴于随机访问所带来的方便,因此,DOM分析器还是有很广泛的使用价值的。
对于XML应用开发来说,DOM就是一个对象化的XML数据接口,一个与语言无关、与平台无关的标准接口规范。它定义了HTML文档和XML文档的逻辑结构,给出了一种访问和处理HTML文档和XML文档的方法。利用DOM,程序开发人员可以动态地创建文档,遍历文档结构,添加、修改、删除文档内容,改变文档的显示方式等等。可以这样说,文档代表的是数据,而DOM则代表了如何去处理这些数据。无论是在浏览器里还是在浏览器外,无论是在服务器上还是在客户端,只要有用到XML的地方,就会碰到对DOM的应用。
作为W3C的标准接口规范,目前,DOM由三部分组成,包括:核心(core)、HTML和XML。核心部分是结构化文档比较底层对象的集合,这一部分所定义的对象已经完全可以表达出任何HTML和XML文档中的数据了。HTML接口和XML接口两部分则是专为操作具体的HTML文档和XML文档所提供的高级接口,使对这两类文件的操作更加方便。
&?xml version="1.0" encoding="gb2312"?&
&addressbook&
&person sex = "male"&
&name&张三&/name&
&email&.cn&/email&
&person sex = "male"&
&name&李四&/name&
&email&.cn&/email&
&/addressbook&
&?xml version="1.0" encoding="gb2312" ?& &books& &book& &author&至尊宝&/author& &title&倘若时光倒流&/title & &/book& &book& &author&白晶晶&/author& &title&月光宝盒实用大全&/title& &/book& &/books&
要严格区分XML文档树中的根结点与根元素结点:根节点(Document)代表的是XML文档本身,是我们解析XML文档的入口,而根元素结点则表示XML文档的根元素,它对应于XML文档的Root。
o最常见的节点类型:
–元素:元素是 XML 的基本构件。典型地,元素可以有其它元素、文本节点或两者兼有来作为其子节点。元素节点还是可以有属性的唯一类型的节点。
–属性:属性节点包含关于元素节点的信息,但实际上,不认为它是元素的子节点
–文本:确切来讲,文本节点是:文本。它可以包含许多信息或仅仅是空白。
–文档(根节点):文档节点是整个文档中所有其它节点的父节点。(根节点不等于根元素节点!)
o较不常见的节点类型:CDATA、注释、处理指令
4、DOM的四个基本接口
文档对象模型利用对象来把文档模型化,这些模型不仅描述了文档的结构,还定义了模型中对象的行为。换句话说,在上面给出的例子里,图中的节点不是数据结构,而是对象,对象中包含方法和属性。在DOM中,对象模型要实现:
o用来表示、操作文档的接口
o接口的行为和属性
o接口之间的关系以及互操作
在DOM接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap。在这四个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过来的。Node接口是其他大多数接口的父类,象Document,Element,Attribute,Text,Comment等接口都是从Node接口继承过来的。NodeList接口是一个节点的集合,它包含了某个节点中的所有子节点。NamedNodeMap接口也是一个节点的集合,通过该接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点。
1)Document接口
Document接口代表了整个XML/HTML文档,因此,它是整棵文档树的根,提供了对文档中的数据进行访问和操作的入口。
由于元素、文本节点、注释、处理指令等都不能脱离文档的上下文关系而独立存在,所以在Document接口提供了创建其他节点对象的方法,通过该方法创建的节点对象都有一个ownerDocument属性,用来表明当前节点是由谁所创建的以及节点同Document之间的联系。
在DOM树中,Document接口同其他接口之间的关系如下图所示:
2)Node接口
Node接口在整个DOM树中具有举足轻重的地位,DOM接口中有很大一部分接口是从Node接口继承过来的,例如,Element、Attr、CDATASection等接口,都是从Node继承过来的。在DOM树中,Node接口代表了树中的一个节点。一个典型的Node接口如下图所示:
3)NodeList接口
NodeList接口提供了对节点集合的抽象定义,它并不包含如何实现这个节点集的定义。NodeList用于表示有顺序关系的一组节点,比如某个节点的子节点序列。另外,它还出现在一些方法的返回值中,例如getElementsByTagName。
在DOM中,NodeList的对象是"live"的,换句话说,对文档的改变,会直接反映到相关的NodeList对象中。例如,如果通过DOM获得一个NodeList对象,该对象中包含了某个Element节点的所有子节点的集合,那么,当再通过DOM对Element节点进行操作(添加、删除、改动节点中的子节点)时,这些改变将会自动地反映到NodeList对象中,而不需DOM应用程序再做其他额外的操作。
NodeList中的每个item都可以通过一个索引来访问,该索引值从0开始。
4)NamedNodeMap接口
实现了NamedNodeMap接口的对象中包含了可以通过名字来访问的一组节点的集合。不过注意,NamedNodeMap并不是从NodeList继承过来的,它所包含的节点集中的节点是无序的。尽管这些节点也可以通过索引来进行访问,但这只是提供了枚举NamedNodeMap中所包含节点的一种简单方法,并不表明在DOM规范中为NamedNodeMap中的节点规定了一种排列顺序。
NamedNodeMap表示的是一组节点和其唯一名字的一一对应关系,这个接口主要用在属性节点的表示上。
与NodeList相同,在DOM中,NamedNodeMap对象也是"live"的。
5、DOM的基本对象
o一切都是节点(对象)
oNode对象:DOM结构中最为基本的对象
oDocument对象:代表整个XML的文档
oNodeList对象:包含一个或者多个Node的列表
oElement对象:代表XML文档中的标签元素
DOM处理XML文档步骤:
&?xml version="1.0"?&
&PERSON PERSONID="E01"&
&NAME&Tony Blair&/NAME&
&ADDRESS&10 Downing Street, London, UK&/ADDRESS&
&TEL&(061) 98765&/TEL&
&FAX&(061) 98765&/FAX&
&EMAIL&&/EMAIL&
&PERSON PERSONID="E02"&
&NAME&Bill Clinton&/NAME&
&ADDRESS&White House, USA&/ADDRESS&
&TEL&(001) &/TEL&
&FAX&(001) &/FAX&
&EMAIL&&/EMAIL&
&PERSON PERSONID="E03"&
&NAME&Tom Cruise&/NAME&
&ADDRESS&57 Jumbo Street, New York, USA&/ADDRESS&
&TEL&(001) &/TEL&
&FAX&(001) &/FAX&
&EMAIL&&/EMAIL&
&PERSON PERSONID="E04"&
&NAME&Linda Goodman&/NAME&
&ADDRESS&78 Crax Lane, London, UK&/ADDRESS&
&TEL&(061) 54 56789&/TEL&
&FAX&(061) 54 56789&/FAX&
&EMAIL&&/EMAIL&
import java.io.F
import javax.xml.parsers.DocumentB
import javax.xml.parsers.DocumentBuilderF
import org.w3c.dom.D
import org.w3c.dom.E
import org.w3c.dom.NodeL
public class DomTest1
public static void main(String[] args) throws Exception
//step1:获得dom解析器工厂(工厂的作用适用于创建具体的解析器)
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//setp2:获得具体的dom解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//step3:解析一个xml文档,获得Document对象(根节点)
Document document = db.parse(new File("candidate.xml"));
NodeList list = document.getElementsByTagName("PERSON");
for(int i = 0;i&list.getLength();i++)
Element element = (Element)list.item(i);
String content = element.getElementsByTagName("NAME").item(0).getFirstChild().getNodeValue();
System.out.println("name:" + content);
content = element.getElementsByTagName("ADDRESS").item(0).getFirstChild().getNodeValue();
System.out.println("address:" + content);
content = element.getElementsByTagName("TEL").item(0).getFirstChild().getNodeValue();
System.out.println("tel:" + content);
content = element.getElementsByTagName("FAX").item(0).getFirstChild().getNodeValue();
System.out.println("email:" + content);
content = element.getElementsByTagName("EMAIL").item(0).getFirstChild().getNodeValue();
System.out.println("--------------------");
6、DOM详解:
我们需要把一个XML文档的内容解析到一个个的Java对象中去供程序使用,利用JAXP,我们只需几行代码就能做到这一点。首先,我们需要建立一个解析器工厂,以利用这个工厂来获得一个具体的解析器对象。JAXP(JAVA API for XML Parsing):用于XML解析的JAVA API。
&?xml version="1.0" encoding="UTF-8"?&
&messages& &message&
Good-bye serialization, hello Java!
&/message&
&/messages&
oDocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
o我们在这里使用DocumentBuilderFacotry的目的是为了创建与具体解析器无关的程序,当DocumentBuilderFactory 类的静态方法newInstance()被调用时,它根据一个系统变量来决定具体使用哪一个解析器。又因为所有的解析器都服从于JAXP所定义的接口,所 以无论具体使用哪一个解析器,代码都是一样的。所以当在不同的解析器之间进行切换时,只需要更改系统变量的值,而不用更改任何代码。这就是工厂所带来的好处。
oDocumentBuilder db = dbf.newDocumentBuilder();
o当获得一个工厂对象后,使用它的静态方法newDocumentBuilder()方法可以获得一个DocumentBuilder对象,这个对象代表了具体的DOM解析器。但具体是哪一种解析器,微软的或者IBM的,对于程序而言并不重要
o然后,我们就可以利用这个解析器来对XML文档进行解析了
oDocument doc = db.parse("c:/xml/message.xml");
oDocumentBuilder的parse()方法接受一个XML文档名作为输入参数,返回一个Document对象,这个Document对象就代表了一个XML文档的树模型。以后所有的对XML文档的操作,都与解析器无关,直接在这个Document对象上进行操作就可以了。而具体对Document操作的方法,就是由DOM所定义的了
o从上面得到的Document对象开始,我们就可以开始我们的DOM解析了。使用Document对象的getElementsByTagName()方法,我们可以得到一个NodeList对象,一个Node对象代表了一个XML文档中的一个标签元素,而NodeList对象,所代表的是一个Node对象的列表
oNodeList nl = doc.getElementsByTagName("message");
o我们通过这样一条语句所得到的是XML文档中所有&message&标签对应的Node对象的一个列表。然后,我们可以使用NodeList对象的item()方法来得到列表中的每一个Node对象
oNode my_node = nl.item(0);
o当一个Node对象被建立之后,保存在XML文档中的数据就被提取出来并封装在这个Node中了。在这个例子中,要提取Message标签内的内容,我们通常会使用Node对象的getNodeValue()方法
oString message = my_node.getFirstChild().getNodeValue();
o请注意,这里还使用了一个getFirstChild()方法来获得message下面的第一个子Node对象。虽然在message标签下面除了文本外并没有其它子标签或者属性,但是我们坚持在这里使用getFirstChild()方法,这主要和W3C对DOM的定义有关。W3C把标签内的文本部分也定义成一个Node,所以先要得到代表文本的那个Node,我们才能够使用getNodeValue()来获取文本的内容
7、oDOM的基本对象有5个:Document,Node,NodeList,Element和Attr
oDocument对象代表了整个XML的文档,所有其它的Node,都以一定的顺序包含在Document对象之内,排列成一个树形的结构,程序员可以通过遍历这颗树来得到XML文档的所有的内容,这也是对XML文档操作的起点。我们总是先通过解析XML源文件而得到一个Document对象,然后再来执行后续的操作。此外,Document还包含了创建其它节点的方法,比如createAttribute()用来创建一个Attr对象。它所包含的主要的方法有
ocreateAttribute(String):用给定的属性名创建一个Attr对象,并可在其后使用setAttributeNode方法来放置在某一个Element对象上面。
ocreateElement(String):用给定的标签名创建一个Element对象,代表XML文档中的一个标签,然后就可以在这个Element对象上添加属性或进行其它的操作。
ocreateTextNode(String):用给定的字符串创建一个Text对象,Text对象代表了标签或者属性中所包含的纯文本字符串。如果在一个标签内没有其它的标签,那么标签内的文本所代表的Text对象是这个Element对象的唯一子对象。
ogetElementsByTagName(String):返回一个NodeList对象,它包含了所有给定标签名字的标签。
ogetDocumentElement():返回一个代表这个DOM树的根元素节点的Element对象,也就是代表XML文档根元素的那个对象。
oNode对象是DOM结构中最为基本的对象,代表了文档树中的一个抽象的节点。在实际使用的时候,很少会真正的用到Node这个对象,而是用到诸如Element、Attr、Text等Node对象的子对象来操作文档。Node对象为这些对象提供了一个抽象的、公共的根。虽然在Node对象中定义了对其子节点进行存取的方法,但是有一些Node子对象,比如Text对象,它并不存在子节点,这一点是要注意的。
oNode对象所包含的主要的方法有
oappendChild(org.w3c.dom.Node):为这个节点添加一个子节点,并放在所有子节点的最后,如果这个子节点已经存在,则先把它删掉再添加进去。
ogetFirstChild():如果节点存在子节点,则返回第一个子节点,对等的,还有getLastChild()方法返回最后一个子节点。
ogetNextSibling():返回在DOM树中这个节点的下一个兄弟节点,对等的,还有getPreviousSibling()方法返回其前一个兄弟节点。
ogetNodeName():根据节点的类型返回节点的名称。
ogetNodeType():返回节点的类型。
ogetNodeValue():返回节点的值。
ohasChildNodes():判断是不是存在有子节点。
ohasAttributes():判断这个节点是否存在有属性。
ogetOwnerDocument():返回节点所处的Document对象。
oinsertBefore(org.w3c.dom.Node new,org.w3c.dom.Node ref):在给定的一个子对象前再插入一个子对象。
oremoveChild(org.w3c.dom.Node):删除给定的子节点对象
oreplaceChild(org.w3c.dom.Node new,org.w3c.dom.Node old):用一个新的Node对象代替给定的子节点对象。
oNodeList对象,顾名思义,就是代表了一个包含了一个或者多个Node的列表。可以简单的把它看成一个Node的数组,我们可以通过方法来获得列表中的元素:
ogetLength():返回列表的长度。
oitem(int):返回指定位置的Node对象
oElement对象代表的是XML文档中的标签元素,继承于Node,亦是Node的最主要的子对象。在标签中可以包含有属性,因而Element对象中有存取其属性的方法,而任何Node中定义的方法,也可以用在Element对象上面。
ogetElementsByTagName(String):返回一个NodeList对象,它包含了在这个标签中其下的子孙节点中具有给定标签名字的标签。
ogetTagName():返回一个代表这个标签名字的字符串。
ogetAttribute(String):返回标签中给定属性名称的属性的值。在这儿需要注意的是,因为XML文档中允许有实体属性出现,而这个方法对这些实体属性并不适用。这时候需要用到getAttributeNode()方法来得到一个Attr对象来进行进一步的操作
ogetAttributeNode(String):返回一个代表给定属性名称的Attr对象。
-Attr对象代表了某个标签中的属性。Attr继承于Node,但是因为Attr实际上是包含在Element中的,它并不能被看作是Element的子对象,因而在DOM中Attr并不是DOM树的一部分,所以Node中的getparentNode(),getpreviousSibling()和getnextSibling()返回的都将是null。也就是说,Attr其实是被看作包含它的Element对象的一部分,它并不作为DOM树中单独的一个节点出现。这一点在使用的时候要同其它的Node子对象相区别
8、解析任意给定的xml文档并在命令行输出:
import java.io.F
import javax.xml.parsers.DocumentB
import javax.xml.parsers.DocumentBuilderF
import org.w3c.dom.A
import org.w3c.dom.C
import org.w3c.dom.D
import org.w3c.dom.E
import org.w3c.dom.NamedNodeM
import org.w3c.dom.N
import org.w3c.dom.NodeL
* 使用递归解析给定的任意一个XML文档并且将其内容输出到命令行上
* @author Admin
public class DomTest3
public static void main(String[] args) throws Exception
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File("student.xml"));
//获得根元素节点
Element root = doc.getDocumentElement();
parseElement(root);
private static void parseElement(Element element)
String tagName = element.getNodeName();
NodeList children = element.getChildNodes();
System.out.print("&" + tagName);
//element元素的所有属性所构成的NamedNodeMap对象,需要对其进行判断
NamedNodeMap map = element.getAttributes();
//如果该元素存在属性
if(null != map)
for(int i = 0;i&map.getLength();i++)
//获得该元素的每一个属性
Attr attr = (Attr)map.item(i);
String attrName = attr.getName();
String attrValue = attr.getValue();
System.out.print(" " + attrName + "=\"" + attrValue + "\"");
System.out.print("&");
for(int i = 0;i & children.getLength();i++)
Node node = children.item(i);
//获得节点的类型
short nodeType = node.getNodeType();
if(nodeType == Node.ELEMENT_NODE)
//是元素,继续递归
parseElement((Element)node);
else if(nodeType == Node.TEXT_NODE)
//递归出口
System.out.print(node.getNodeValue());
else if(nodeType == Node.COMMENT_NODE)
System.out.print("&!--");
Comment comment = (Comment)
//注释内容
String data = comment.getData();
System.out.print(data);
System.out.print("--&");
System.out.print("&/" + tagName +"&");
没有更多推荐了,DOM 解析 xml 文件无缘无故变大,如何解决??
[问题点数:10分,结帖人ybbkd2]
本版专家分:105
结帖率 100%
CSDN今日推荐
本版专家分:1222
本版专家分:19915
2005年7月 Java大版内专家分月排行榜第三
本版专家分:105
结帖率 100%
本版专家分:105
结帖率 100%
本版专家分:7462
本版专家分:7462
本版专家分:145
本版专家分:453
本版专家分:105
结帖率 100%
本版专家分:105
结帖率 100%
本版专家分:19915
2005年7月 Java大版内专家分月排行榜第三
本版专家分:131
本版专家分:7462
匿名用户不能发表回复!|
CSDN今日推荐XML的DOM解析
求解!该如何处理
XML的DOM解析 求解!!!
&?xml version="1.0" encoding="gb2312"?&
&ShowList&
&Movie ID="A001"&
&Name&功夫&/Name&
&Poster&gongfu.jpg&/Poster&
&Director&周星驰&/Director&
&Actor&周星驰&/Actor&
&Type&Action&/Type&
&Price&40&/Price&
&Schedule&
&Item&8-00 9-45&/Item&
&Item&10-00 11-45&/Item&
&/Schedule&
&Movie ID="A002"&
&Name&疯狂的石头&/Name&
&Poster&bone.jpg&/Poster&
&Director&宁浩&/Director&
&Actor&郭涛&/Actor&
&Type&Comedy&/Type&
&Price&50&/Price&
&Schedule&
&Item&12-00 13-45&/Item&
&Item&14-00 15-45&/Item&
&Item&15-00 16-45&/Item&
&/Schedule&
&Movie ID="A003"&
&Name&蜘蛛侠3&/Name&
&Poster&spiderman3.jpg&/Poster&
&Director&萨姆·莱米&/Director&
&Actor&托贝·马奎尔&/Actor&
&Type&Action&/Type&
&Price&40&/Price&
&Schedule&
&Item&16-00 17-45&/Item&
&/Schedule&
&/Movie&…………………………………………………………………………
没有更多推荐了,解析 XML DOM
解析 XML DOM
大多数浏览器都内建了供读取和操作 XML 的 XML 解析器。
解析器把 XML 转换为 JavaScript 可存取的对象。
W3School 提供的实例独立于浏览器和平台。这些实例可在所有现代浏览器中运行。
所有现代浏览器都内建了用于读取和操作 XML 的 XML 解析器。
解析器把 XML 读入内存,并把它转换为可被 JavaScript 访问的 XML DOM 对象。
微软的 XML 解析器与其他浏览器中的解析器是有差异的。微软的解析器支持对 XML 文件和 XML 字符串(文本)的加载,而其他浏览器使用单独的解析器。不过,所有的解析器都含有遍历 XML 树、访问、插入及删除节点的函数。
在本教程中,我们将为您讲解如何创建可在 IE 及其他浏览器中运行的脚本。
通过微软的 XML 解析器加载 XML
微软的 XML 解析器内建于 Internet Explorer 5 及更高版本中。
下面的 JavaScript 片段把 XML 文档 (&&) 载入了解析器:
xmlDoc=new ActiveXObject(&Microsoft.XMLDOM&);
xmlDoc.async=&false&;
xmlDoc.load(&books.xml&);
代码解释:
第一行创建空的微软 XML 文档对象
第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
第三行告知解析器加载名为 &books.xml& 的文档
下面的 JavaScript 片段把名为 txt 的字符串载入解析器中:
xmlDoc=new ActiveXObject(&Microsoft.XMLDOM&);
xmlDoc.async=&false&;
xmlDoc.loadXML(txt);
注释:loadXML() 方法用于加载字符串(文本),而 load() 用于加载文件。
在 Firefox 及其他浏览器中的 XML 解析器
下面的 JavaScript 片段把 XML 文档 (&&) 载入了解析器:
xmlDoc=document.implementation.createDocument(&&,&&,null);
xmlDoc.async=&false&;
xmlDoc.load(&books.xml&);
代码解释:
第一行创建空的 XML 文档对象
第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
第三行告知解析器加载名为 &books.xml& 的文档
下面的 JavaScript 片段把名为 txt 的字符串载入解析器中:
parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,&text/xml&);
代码解释:
第一行创建一个空的 XML 文档对象
第二行告知解析器加载名为 txt 的字符串
注释:Internet Explorer 使用 loadXML() 方法来解析 XML 字符串,而其他浏览器使用 DOMParser 对象。
解析 XML 文件 - 一个跨浏览器的实例
下面的例子把 XML 文档 (&&) 载入 XML 解析器:
&script type=&text/javascript&&
try //Internet Explorer
xmlDoc=new ActiveXObject(&Microsoft.XMLDOM&);
try //Firefox, Mozilla, Opera, etc.
xmlDoc=document.implementation.createDocument(&&,&&,null);
catch(e) {alert(e.message)}
xmlDoc.async=
xmlDoc.load(&books.xml&);
document.write(&xmlDoc is loaded, ready for use&);
catch(e) {alert(e.message)}
Error: Access Across Domains
出于安全方面的原因,现代的浏览器不允许跨域的访问。
这意味着,网页以及它试图加载的 XML 文件,都必须位于相同的服务器上。
W3School 的实例所打开的 XML 文件位于 W3School 的域上。
假如你打算在自己的网页上使用上面的例子,则必须把 XML 文件放到自己的服务器上。否则,xmlDoc.load() 将产生错误 &Access is denied&。
解析 XML 字符串 - 一个跨浏览器的实例
下面的代码加载并解析了一个 XML 字符串:
&script type=&text/javascript&&
text=&&bookstore&&
text=text+&&book&&;
text=text+&&title&Harry Potter&/title&&;
text=text+&&author&J K. Rowling&/author&&;
text=text+&&year&2005&/year&&;
text=text+&&/book&&;
text=text+&&/bookstore&&;
try //Internet Explorer
xmlDoc=new ActiveXObject(&Microsoft.XMLDOM&);
xmlDoc.async=&false&;
xmlDoc.loadXML(text);
try //Firefox, Mozilla, Opera, etc.
parser=new DOMParser();
xmlDoc=parser.parseFromString(text,&text/xml&);
catch(e) {alert(e.message)}
document.write(&xmlDoc is loaded, ready for use&);
注释:Internet Explorer 使用 loadXML() 方法来解析 XML 字符串,而其他浏览器使用 。}

我要回帖

更多关于 xml文件解析工具 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信