解析XML数据的方法是什么?(解析xml数据的方法是什么样的)

======================上次我们讨论了解析JSON的四种方法,所以这次我们将看看解析XML的四种方法。DOM解析SAX解析JDOM解析DOM4J分析案例实践DOM解析DOM(文档对象模型,文档对象模型),在一个应用程序中,一个基于DOM的XML解析器

======================

上次我们讨论了解析JSON的四种方法,所以这次我们将看看解析XML的四种方法。

四种解析方法

  • 唐parsing
  • SAX解析
  • JDOM 交配
  • DOM4J分析

案例实践

唐parsing

DOM(文档对象模型,文档对象模型),在应用程序中,基于DOM的XML解析器将XML文档转换为对象模型的集合(通常称为DOM树),应用程序通过对该对象模型的操作实现对XML文档数据的操作。XML本身以树的形式出现,因此当操作DOM时,它也将被转换为章节树的形式。在整个DOM树中,最大的位置指向文档,这意味着一个文档,该文档中只有一个根节点。

注意:在使用DOM操作时,每个文本区域也是一个节点,称为文本节点。

核心操作界面

DOM解析中有以下四个核心操作接口:

文档:该接口表示整个XML文档,并表示整个DOM树的根。它提供对文档中的数据的访问和操作。通过文档节点,可以访问XML文件中的所有元素。

节点:该接口在整个DOM树中起着关键作用。DOM操作的大部分核心接口都继承自节点接口。例如:文档、Element和其他接口,在DOM树中,每个节点接口代表DOM树中的一个节点。

节点列表:该接口表示节点的集合,一般用于表示一组具有序列关系的节点,例如:节点的一个子节点,当文档发生变化时,将直接影响节点列表集合。

Named节点Map:该接口表示一组节点及其唯一名称之间的一一对应关系。该接口主要用于属性节点的表示。

DOM解析过程

如果一个程序需要执行DOM解析和读取操作,它还需要遵循以下步骤:

(1)建立文档BuilderFactory: 文档BuilderFactory factory = 文档BuilderFactory。NewInstance ();
(2)建立文档Builder: 文档Builder builder =工厂。new文档Builder ();
③创建一个文档:文档 doc = builder.parse(“要解析的文件路径”);
④创建节点列表: 节点列表 nl = doc.getElementsByTagName(“Read 节点”);
⑤读取XML信息

SAX解析

SAX (XML的简单API)解析是按照XML文件的顺序逐步进行的。SAX没有一个官方的标准机构,它不属于任何标准组织或团体,也不属于任何公司或个人,但它提供了一种供任何人使用的计算机技术。

SAX (XML的简单API,操作XML的简单接口)与DOM操作的不同之处在于,SAX使用顺序模式进行访问,是一种快速读取XML数据的方法。当使用SAX解析器进行操作时,将触发一系列操作。当扫描到文档(document)的开头和结尾以及元素(element)的开头和结尾时,会调用相关的处理方法,这些操作方法会做出相应的动作。操作直到扫描整个文档。

如果希望实现这种SAX解析,必须首先创建一个SAX解析器。

/ / 1。创建解析器工厂
SAXParserFactory工厂= SAXParserFactory. newinstance ();
/ / 2。获取解析器
SAXParser parser = factory.newSAXParser(;
// SAX解析器,继承自DefaultHandler
字符串路径= new File(“resource/demo01.xml”).getAbsolutePath();
/ /解析
解析器。解析(path, new MySaxHandler());

JDOM 交配

W3C本身、DOM和SAX提供的XML操作标准,但从开发的角度来看,DOM和SAX都有各自的特点,DOM可以修改,但不适合读取大文件,而SAX可以读取大文件,但不能自己修改。所谓JDOM = DOM可修改+ SAX读取大文件,JDOM本身就是一个免费的开源组件,直接从www.jdom.orgUpload下载即可。

JDOM操作xml的常用类:

文档:表示整个xml文档,它是一个树形结构

元素:表示xml元素,提供操作其子元素的方法,如文本、属性和名称空间等。

属性:表示元素中包含的属性

Text: xml文本信息

XMLOutputter: xml输出流,底层是通过JDK中间流实现的

格式:提供xml文件输出的编码、样式和布局等设置

我们发现JDOM的输出操作要比传统的DOM方便得多,而且也更加直观,包括输出都非常简单。此时观察到的是JDOM’s对DOM解析的支持,但也有人说JDOM本身也支持SAX的特性;因此,SAX可以用于解析操作。

//获取SAX解析器
SAXBuilder构建器=新的SAXBuilder();
文件文件= new文件(“resource/demo01.xml”);
//获取文档
文档doc = builder。构建(新文件(file.getAbsolutePath ()));
//获取根节点
元素根= doc.getRootElement();
System.out.println(root.getName(;
//获取根节点下的所有子节点,或根据标签名获取指定的直接点
List< Element>list = root.getChildren();
System.out.println (list.size ());
for(int x = 0; x<list.size(; x++{
元素e = list.get(x);
//获取元素的名称和其中的文本
字符串名称= e.getName();
System.out.println(name + “=” + e.getText(;
System.out.println(“ = = = = = = = = = = = = = = = = = = the & # 8221;) ;
}

DOM4J分析

dom4j是一个用于处理XML、XPath和XSLT的简单开源库。它基于Java平台,使用Java’s集合框架来充分集成DOM、SAX和JAXP。下载路径:

http://www.dom4j.org/dom4j-1.6.1/

http://sourceforge.net/projects/dom4j

与JDOM一样,DOM4J是一种免费的XML开源组件,但由于该技术在当前的开发框架(如Hibernate、Spring等)中被广泛使用,所以都使用DOM4J功能,因此作为介绍,您可以对该组件有一个了解。没有好坏之分,通用框架更多地使用DOM4J,如果我们通常想使用JDOM则更常见。可以发现,DOM4J已经发挥了很多新特性,比如输出格式可以非常好。

文件文件=新文件(“resource/outputdom4j.xml”);
SAXReader reader = new SAXReader(;
//读取文件作为文档
文档doc = reader.read(文件);
//获取文档的根元素
元素根= doc.getRootElement();
//根据元素查找所有子节点
Iterator<Element> iter = root.elementIterator(;
而(iter.hasNext ()) {
元素名= iter.next();
System.out.println(“value = ” + name.getText(;
}

扩展~XML创建

DOM创建

如果希望生成XML文件,则应该在创建文档时使用new文档()方法

如果您希望输出DOM文档,那么它本身就比较麻烦。一次写多份拷贝

公共静态void createXml()抛出异常{
//获取解析器工厂
文档BuilderFactory工厂= 文档BuilderFactory.newInstance ();
//获取解析器
文档Builder builder = factory.new文档Builder ();
/ /创建文件
文档doc = builder.new文档 ();
//创建元素并设置关系
root=doc.createElement(“people”;
Element person=doc.createElement(“person”;
元素名称= doc.createElement(& # 8220;名字# 8221;);
Element age=doc.createElement(“age”;
name.appendChild(doc.createText节点(“lebyte”;
age.appendChild(doc.createText节点(“ 10 the & # 8221;) );
doc.appendChild(根);
root.appendChild(人);
person.appendChild(名称);
person.appendChild(年龄);
//写出来
//获取变压器工厂
TransformerFactory tsf = TransformerFactory.newInstance ();
变成ts = tsf.newTransformer ();
/ /设置编码
ts.setOutputProperty (OutputKeys。编码,& # 8220;utf - 8 # 8221;);
//创建一个新的输入源,使用一个DOM节点作为转换源树的holder
DOMSource source=new DOMSource(doc);
//作为转换结果的持有者
文件文件=新文件(“src/output.xml”;
流结果结果=新的流结果(文件);
ts.transform(来源、结果);
}

SAX创造

//创建SAXtransformerfactory对象
SAXTransformerFactory. newinstance ();
尝试{
//通过SAXTransformerFactory对象创建一个TransformerHandler对象
此时此刻。
//通过transformerHandler对象创建一个transformer对象
Transformer tf = handler.getTransformer();
//设置Transformer对象的属性
tf.setOutputProperty (OutputKeys。编码,& # 8220;utf - 8 # 8221;);
tf.setOutputProperty (OutputKeys。缩进,& # 8220;是的# 8221;);
//创建一个Result对象,并将其与处理程序相关联
文件文件=新文件(“src/output.xml”);
如果文件了exists () {
文件。createNewFile ();
}
结果结果=新StreamResult(新FileOutputStream(文件));
handler.setResult(结果);
//通过Handler写入XML内容
/ /打开文件
handler.start文档 ();
{pos(4)}属性=新属性
//创建根节点书店
handler.startElement(“”, “”, “bookstore”, attr);
attr.clear ();
attr.addAttribute (& # 8220; & # 8221; & # 8220; & # 8221;, & # 8220; id # 8221;, & # 8220; & # 8221;, & # 8220; 1 & # 8221;);
handler.startElement(& # 8220; & # 8221; & # 8220; & # 8221;, & # 8220;书# 8221;,attr);
attr.clear ();
handler.startElement(& # 8220; & # 8221; & # 8220; & # 8221;, & # 8220;名字# 8221;,attr);
handler.characters(“颈椎病康复指南”.toCharArray(), 0, “颈椎病康复指南”.length());
handler.endElement(& # 8220; & # 8221; & # 8221; & # 8221;, & # 8221;名字# 8221;);
//关闭每个节点
handler.endElement(& # 8220; & # 8221; & # 8220; & # 8221;, & # 8220;书# 8221;);
handler.endElement(& # 8220; & # 8221; & # 8220; & # 8221;, & # 8220;书店# 8221;);
handler.end文档(;
} catch (SAXException e) {
// TODO自动生成的捕获块
e.printStackTrace(;
} catch (FileNotFoundException e) {
// TODO自动生成的捕获块
e.printStackTrace(;
} catch (IOException e) {
// TODO自动生成的捕获块
e.printStackTrace(;
} catch (TransformerConfigurationException e) {
// TODO自动生成的捕获块
e.printStackTrace(;
}

JDOM建立

//创建节点
元素person = new Element(“person”);
元素名= new Element(“name”);
元素年龄= new Element(“age”);
//创建属性
属性id = new属性(“id”,”1″);
//设置文本
name.setText(“lebyte”;
age.setText(“ 10 the & # 8221;) ;
//设置关系
文档文档=新文档(人);
person.addContent(名称);
name.setAttribute (id);
person.addContent(年龄);
XMLOutputter out = new XMLOutputter();
文件文件=新文件(“resource/outputjdom.xml”);
房。输出(doc, new fileoutstream (file.getAbsoluteFile);

DOM4J创建

//使用documententhelper创建一个文档对象
文档文档= documententhelper . createdocument ();
//创建元素并设置关系
元素person = document.addElement(“person”);
元素名= person.addElement(“name”);
元素年龄= person.addElement(“age”);
//设置文本名。settext (“lebyte”);
age.setText(“ 10 the & # 8221;) ;
//创建一个格式化输出
OutputFormat = OutputFormat. createprettyprint ();
of.setEncoding (& # 8220; utf - 8 # 8221;);
//输出到文件
文件文件=新文件(“resource/outputdom4j.xml”);
XMLWriter writer = new XMLWriter(new FileOutputStream(new File(File . getabsolutepath ())),of);
//写出来
writer.write(文档);
writer.flush ();
writer.close ();

JAVA

创建一个简单的映射器代理工厂(pr怎么创建代理文件)

2023-1-18 13:29:44

JAVA

监控系统的选择,了解一切在一篇文章~(请为一部你所了解的网络文学作品写一篇赏析)

2023-1-18 13:31:14

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索