记录学习过程中的点点滴滴
dom4j
java-dom4j命名空间问题解决方法
十一 21st
大家经常运用DOM4J操作XML文档,如果XML文档存在namespace的话,读写XML经常不工作,解决方案很简单的:
一个XML文件头
<?xml version=”1.0″?>
<scxml xmlns=”http://www.w3.org/2005/07/scxml”
version=”1.0″
initialstate=”coordinator”>
请注意这个xml文件是带了namespace的
读写这个xml要如下操作:
InputStream is = FileInputStream(filePath);
SAXReader reader = new SAXReader();
Map map = new HashMap();//store namespace-mapping
map.put(“scxml”,”http://www.w3.org/2005/07/scxml”);
reader.getDocumentFactory().setXPathNamespaceURIs(map);
Document document = reader.read(is);
在操作任何节点的时候,你的XPath必须都要加上Namespace,以下都是可行的XPath表达式:
String strXPath = “//scxml:state[@id='member_init']“;
String strXPath = “/scxml:*[name()='scxml']/scxml:*[name()='datamodel']/scxml:data/@name”;String strXPath = “/scxml:*[name()='scxml']/scxml:*[name()='state']/scxml:*[name()='state' and @id='member_init']/scxml:transition”;
List list = document.selectNodes(strXPath);
看到没有,所有的//和/后面都要加上”scxml:”(节点属性前面不要加) .
第一个表达式是要找文档里面id为’member_init’的state节点
第二个表达式是找name属性,这个name属性的有这样的祖先链/scxml/datamodel/data
第三个也没什么了,跟找节点transition,并对它的祖先链有所要求
当然这里你也要小心的对属性元素区别处理,因为属性名前是不带namespace的.
java-org.dom4j常用api介绍
十一 20th
//导入必要的包 import org.dom4j.Document;//Document文档类 import org.dom4j.Element//元素节点类 import org.dom4j.QName;//一个对元素名字的封装类 import org.dom4j.io.SAXReader;//sax读取类 import org.dom4j.io.XMLWriter;//xml写入类 import org.dom4j.io.OutputFormat;//输出格式 //读入xml文件 String fileName = "*****"; InputStream input = new FileInputStream(fileName); SAXReader reader = new SAXReader(); Document doc = reader.read(input); <a href="http://yaronspace.cn/blog/archives/185#more-185" class="more-link">更多 ></a>
java中解析xml四种方法
十 31st
<1>dom:是将xml作为树状结构进行解析的,一次性的将所有的内容读入内存,适合于xml文件比较小而且经常更改的情况
<2>sax:分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨 大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。
DOM 采用建立树形结构的方式访问 XML 文档,而 SAX 采用的事件模型
<3>jdom:与dom差不多
<4>dom4j:这个是当前java对xml文件解析最流行的方式,DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。
对于大的xml文件一般采用dom4j方式,不会发生内存溢出
http://www.it.com.cn/f/edu/053/27/93819.htm 这篇文章对四个性能进行了比较,dom和jdom性能最差,dom4j性能最优!
近期评论