项目中做消息签名验证需要将xml各个节点值相加,采用dom4j和jdom分别实现。
dom4j:
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
String xml="<?xml version=\"1.0\" encoding=\"UTF-8\"><Order><Cid>456</Cid><Pwd>密码</Pwd><Pid>商品单号</Pid><Price>商品价格</Price></Order>";
try {
Document doc = DocumentHelper.parseText(xml);
SAXReader reader = new SAXReader();
Element el=doc.getRootElement();
for(Iterator it=el.elementIterator();it.hasNext();){
Element element = (Element) it.next();
System.out.println(element.getText());
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jdom实现如下:
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
public List xmlElements(String xmlDoc) {
//创建一个新的字符串
StringReader read = new StringReader(xmlDoc);
//创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);
//创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
try {
//通过输入源构造一个Document
Document doc = sb.build(source);
//取的根元素
Element root = doc.getRootElement();
//得到根元素所有子元素的集合
List jiedian = root.getChildren();
//获得XML中的命名空间(XML中未定义可不写)
Namespace ns = root.getNamespace();
Element et = null;
for(int i=0;i<jiedian.size();i++){
et = (Element) jiedian.get(i);//循环依次得到子元素
System.out.println(et.getValue());
}
}
} catch (JDOMException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws Exception{
String xml0="<?xml version=\"1.0\" encoding=\"UTF-8\"?><Order><Cid>456</Cid><Pwd>密码</Pwd><Pid>商品单号</Pid><Prices><Price>商品价格01</Price><Price>商品价格02</Price></Prices></Order>";
doc.xmlElements(xml0);
}
以上只能实现树结构2层的XML,以下递归出多层XML节点值:
public static String getXmlElmentValue(String xml){
StringBuffer str=new StringBuffer();
try {
org.dom4j.Document doc= DocumentHelper.parseText(xml);
org.dom4j.Element el=doc.getRootElement();
return recGetXmlElementValue(el,str).toString();
} catch (DocumentException e) {
e.printStackTrace();
return null;
}
}
private static StringBuffer recGetXmlElementValue(org.dom4j.Element ele,StringBuffer valueBuff){
List eleList = ele.elements();
if(eleList.size()==0){
valueBuff.append(ele.getText().replaceAll("[\n-\r]", ""));
return valueBuff;
}else{
for(Iterator<org.dom4j.Element> iter = eleList.iterator();iter.hasNext();){
org.dom4j.Element innerEle = iter.next();
recGetXmlElementValue(innerEle,valueBuff);
}
return valueBuff;
}
}
分享到:
相关推荐
为了处理XML文档,Java提供了多种API,其中最常用的包括DOM、SAX、DOM4J和JDOM。以下是对这些方法的详细介绍: 1. DOM(Document Object Model) DOM是一种树形结构的API,它将整个XML文档加载到内存中,形成一个...
本文将详细介绍生成和解析XML的四种主要方法:DOM、DOM4J、SAX和JDOM。 1. DOM(Document Object Model) DOM是W3C组织推荐的一种解析XML的标准方式。它将XML文档视为一个树形结构,每个节点代表XML文档的一部分。...
DOM4J通过提供易于使用的接口和类,使得开发者可以方便地遍历XML树、查找特定节点、添加或删除节点,以及修改节点内容。 1. **XML的创建**: 使用DOM4J创建XML文档通常涉及到创建Document对象,然后添加Element...
DOM4J支持XPath查询,可以更简单地定位和操作XML节点。此外,DOM4J也支持SAX解析,结合了DOM的便利性和SAX的效率。在生成XML字符串时,DOM4J提供了简洁的API来构建和输出XML文档。 4. JDOM JDOM是另一个Java的XML...
在Java中,有多种方式来解析和操作XML文档,包括DOM(Document Object Model)、SAX(Simple API for XML)、JDOM和DOM4J。每种方法都有其特点和适用场景,相应的,它们也需要引入特定的库文件。以下是对这些方法...
在处理XML文档时,有多种解析方式,包括DOM、SAX、JDOM和DOM4J。每种解析方式都有其特性和适用场景,下面将详细探讨这四种解析方法。 1. DOM(Document Object Model) DOM解析器将整个XML文档加载到内存中,形成一...
在处理XML时,有多种解析器可供选择,包括DOM(Document Object Model)、SAX(Simple API for XML)、JDOM以及DOM4J。下面将详细解释这些解析方式及其特点。 1. DOM解析器 DOM解析器将整个XML文档加载到内存中,...
Java读取XML文档时,通常有多种方法,包括SAX、DOM、JDOM和DOM4J等。这些解析器各有特点,适用于不同的场景。这里主要介绍DOM4J库的使用,DOM4J是一个非常灵活且功能强大的XML处理库,提供了丰富的API来处理XML文档...
DOM4J和JDOM是Java中处理XML的主要库,提供了XML的解析、创建和修改功能。 JDOM是Java中一个专注于XML处理的库,它提供了一种简单和直接的方式来构建和操作XML文档。在提供的`parse()`方法中,可以看到如何使用JDOM...
通过这些对象,开发者可以方便地进行添加、删除、修改XML节点的操作,同时DOM4J还集成了XPath表达式的支持,使得查找和操作XML节点变得更加便捷。 接下来,我们来看看JDOM,它是Java中另一种流行的XML处理库。JDOM...
- DOM4J的核心思想是提供一个灵活的、面向对象的模型来处理XML文档,包括元素、属性、文本节点等。 - 它不仅支持标准的DOM API,还提供了基于事件的SAX解析器和一个XPath实现,以满足不同场景的需求。 2. **主要...
Java在处理XML文档时,经常会使用到解析库,其中Dom4j和JDom是两个非常重要的选择。这两个库都是基于Java的DOM(Document Object Model)实现,提供了方便的方式来读取、写入、修改XML文件。下面我们将详细探讨这两...
### DOM、JDOM、DOM4J解析XML实例 #### DOM解析XML DOM(Document Object Model)是一种树形结构的数据模型,用于表示XML或HTML文档。它允许程序在内存中加载整个文档,并通过提供的API来访问和修改文档中的任何...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高性能的方式来解析、...同时,DOM4J与其他Java XML库相比,如JDOM和Java内置的DOM API,具有更简洁的API和更好的性能,因此在Java社区中被广泛使用。
本文将深入探讨DOM、SAX、JDom和dom4j四种流行的Java XML解析器,以及它们在处理XML文档时的特点和用法。 1. DOM(Document Object Model) DOM是W3C推荐的一种解析XML的标准方法。它将XML文档表示为一个树形结构,...
在Java中,有多种XML解析器供开发者选择,包括SAX(Simple API for XML)、DOM(Document Object Model)、JDOM和DOM4J。这四种解析方式各有特点,适用于不同的场景。下面我们将详细探讨它们的原理、优缺点以及应用...
4. **文档模型**:DOM4J提供了一个强大的文档模型,可以方便地创建、修改和遍历XML结构。 5. **性能优化**:DOM4J在内存管理和性能方面进行了优化,尤其在处理大型XML文件时表现优秀。 JDOM,全称为Java Document ...
- **JDOM**:另一个Java XML库,设计目标类似DOM4J,但DOM4J在功能和性能上更胜一筹。 - **StAX**:流式API,性能较好,但灵活性不如DOM4J。 **总结** DOM4J作为Java中处理XML的首选库,因其易用性和高效性而受到...
处理XML文档有多种方式,其中最常见的是SAX(Simple API for XML)、DOM(Document Object Model)、JDOM和DOM4J。下面我们将详细探讨这四种方法。 1. DOM(Document Object Model) DOM是W3C制定的一个标准,它...
DOM4J提供了解析后的XML文档的遍历和操作接口。通过`Element`、`Attribute`等接口,我们可以轻松找到目标节点并进行修改。例如,如果要修改根元素`<root>`的某个子元素`<child>`的值,可以这样做: ```java ...