这几天被同事问道是否可以用dom4j来操作代用命名空间的xml(类似:<CWMRDB:Catalog>这种标签)
由于没有研究过,同事决定使用java自带的api来编写。
今天有时间变查了一下资料,后来发现dom4j完全可以胜任这项工作。网上有很多代码,看来看去云里雾里的。后来看到一个网友写到(直接用冒号后边的标签就能取到),试了一下,果真可以。
下面写了一个测试例子,有xml的读写操作。有兴趣的朋友可以参考,代码比较简单,就不过多的介绍。
java代码:
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Namespace; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.Test; public class TestOperXML { //@Test public void testOfReader(){ String fileName = "D:\\tb_user1.xml"; SAXReader reader = new SAXReader(); try { Document doc = reader.read(new File(fileName)); Element root = doc.getRootElement(); Element content = root.element("XMI.content"); println(content.getName()); Element catalog = content.element("Catalog"); println(catalog.getName()); Namespace np = catalog.getNamespace(); println(catalog.getNamespace().getPrefix()); println("xmi.id:"+catalog.attribute("xmi.id").getText()); println("name:"+catalog.attribute("name").getText()); println("visibility:" + catalog.attribute("visibility").getText()); } catch (DocumentException e) { e.printStackTrace(); } } //@Test public void testOfWriter(){ Document doc = DocumentHelper.createDocument(); Element root = doc.addElement("XMI"); root.addNamespace("CWM", "org.omg.CWM1.0").addNamespace("CWMRDB", "org.omg.CWM1.0/Relational").addNamespace("CWMOLAP", "org.omg.CWM1.0/OLAP").addNamespace("CWMTFM", "org.omg.CWM1.0/Transformation").addAttribute("xmi.version", "1.1").addAttribute("timestamp", "5月 23 2016 13:10:03"); Element xmlHeader = root.addElement("XMI.header"); Element documentation = xmlHeader.addElement("XMI.documentation"); documentation.addElement("XMI.exporter").setText("Meta Integration Model Bridge"); documentation.addElement("XMI.exporterVersion").setText("6.0.3 - Jan 28 2009 18:35:56"); xmlHeader.addElement("metamodel").addAttribute("xmi.name", "CWM").addAttribute("xmi.version", "1.0"); Element content = root.addElement("XMI.content"); Element catalog = content.addElement("CWMRDB:Catalog").addAttribute("xmi.id", "_4").addAttribute("name", "Model_1").addAttribute("visibility", "public"); catalog.addNamespace("CWMRDB", "org.omg.CWM1.0/Relational"); Element schema = catalog.addElement("CWM:Namespace.ownedElement").addNamespace("CWM", "org.omg.CWM1.0").addElement("Schema"); schema.addNamespace("CWMRDB", "org.omg.CWM1.0/Relational"); schema.addElement("CWM:Namespace.ownedElement").addNamespace("CWM", "org.omg.CWM1.0"); try { XMLWriter writer = new XMLWriter(new FileWriter("out.xml")); writer.write(doc); writer.close(); } catch (IOException e) { e.printStackTrace(); } } @Test public void testOfXPath(){ String fileName = "D:\\tb_user1.xml"; SAXReader reader = new SAXReader(); try { Document doc = reader.read(new File(fileName)); List list = doc.selectNodes("//XMI/XMI.content/CWMRDB:Catalog"); for(Object o : list){ Element ele = (Element)o; println(ele.getName()); List list1 = ele.selectNodes("//CWMRDB:Catalog"); println(list1); } }catch(Exception e){ e.printStackTrace(); } } private void println(Object o){ if(o == null){ System.out.println(":>> null "); }else{ System.out.println(":>> "+o.toString()); } } }
xml代码:
<?xml version="1.0" encoding="utf-8"?> <XMI xmlns:CWM="org.omg.CWM1.0" xmlns:CWMRDB="org.omg.CWM1.0/Relational" xmlns:CWMOLAP="org.omg.CWM1.0/OLAP" xmlns:CWMTFM="org.omg.CWM1.0/Transformation" xmi.version="1.1" timestamp="5月 23 2016 13:10:03"> <XMI.header> <XMI.documentation> <XMI.exporter>Meta Integration Model Bridge</XMI.exporter> <XMI.exporterVersion>6.0.3 - Jan 28 2009 18:35:56</XMI.exporterVersion> </XMI.documentation> <XMI.metamodel xmi.name="CWM" xmi.version="1.0"/> </XMI.header> <XMI.content> <CWMRDB:Catalog xmi.id="_4" name="Model_1" visibility="public"> <CWM:Namespace.ownedElement> <CWMRDB:Schema xmi.id="_5" name="unnamed_5" visibility="public" namespace="_4"> <CWM:Namespace.ownedElement></CWM:Namespace.ownedElement> </CWMRDB:Schema> </CWM:Namespace.ownedElement> </CWMRDB:Catalog> <CWM:Catalog></CWM:Catalog> </XMI.content> </XMI>
相关推荐
Java中的XML解析是处理XML数据的关键技术,JDom是一个高效的、纯Java的XML处理库,它为Java开发者提供了便捷的方式来创建、...在实际项目中,根据具体需求,还可以结合其他XML解析库,如DOM4J、XOM等,进行选择和使用。
Delphi7向常用的XML文件中添加内容,按照XML的节点规则依次写入内容,自定义各个节点及节点内容,具体的操作代码如下示: var iXml: IDOMDocument; iRoot, iNode, iNode2, iChild, iAttribute: IDOMNode; ...
XML元素和属性的名称必须遵循特定的规则,例如它们必须以字母、下划线或冒号开头,且只能包含字母、数字、下划线、冒点和冒号。 3. **XML文档声明**: 每个XML文档都应该以一个文档声明开始,如`<?xml version=...
- **DOM4J**: 是一个非常流行的Java库,用于处理XML,包括解析、操作和生成XML。 - **Apache Xerces**: 是一个开放源码的XML解析器,支持DOM、SAX和XSLT。 6. **XML在Web服务中的应用** - **SOAP (Simple Object...
在JavaScript中,可以使用DOM API来操作XML: ```javascript let xmlDoc = new DOMParser().parseFromString(xmlData, 'text/xml'); let nameNode = xmlDoc.getElementsByTagName('name')[0]; nameNode.textContent ...
4. **C#中的XML操作**:在.NET框架中,有多种类库支持XML处理,如System.Xml命名空间下的XmlDocument、XPathDocument、XmlNodeReader等。这些类允许我们读取、写入、查询和操作XML文档。 5. **LINQ to XML**:C# ...
本教程将深入探讨XML在网页制作中的应用,帮助初学者理解并掌握XML的基本概念、语法以及实际操作。 1. XML基础 XML起源于SGML(Standard Generalized Markup Language),其核心理念是通过自定义标签来描述数据。...
如XmlDocument用于DOM操作,XmlElement表示XML元素,XmlAttribute表示属性。LINQ to XML是C# 3.0引入的新特性,它提供了一种更简洁、类型安全的方式来创建和查询XML。 **XML实例** ```xml <title lang="en">XML...
1. DOM解析:将整个XML文档加载到内存中,形成一棵DOM树,便于遍历和操作。 2. SAX解析:逐行读取XML,事件驱动,只在需要时处理数据,节省内存。 3. StAX(Streaming API for XML):流式解析,允许向前移动的迭代...
DOM(Document Object Model)模型是XML的一种树形表示,TXMLDocument就是基于DOM的,允许对XML文档进行增删改查操作。 8. **XML与数据库交互** 在Delphi中,可以使用XML数据绑定技术,将XML数据直接映射到数据库...
四、XML解析 XML解析器负责读取XML文档并验证其是否符合规范。有两种主要的解析方式: 1. 预处理解析器(DTD或XML Schema):用于验证文档结构和数据。 2. 事件驱动解析器(SAX或DOM):SAX按需读取,占用内存少;...
四、DTD(Document Type Definition)与XML Schema 为了验证XML文档的结构是否符合规定,可以使用DTD或XML Schema。DTD定义了一组规则,确保XML文档的结构和元素的使用是合法的。XML Schema则提供了更强大、更灵活的...
4. DTD(Document Type Definition)与XSD(XML Schema) DTD和XSD用于定义XML文档的结构和数据类型,确保数据的有效性和一致性。虽然此资源没有提及,但了解它们对于更严谨的XML处理是必要的。 5. 解析XML 在.NET...
DOM将整个XML文档加载到内存中,形成一棵树形结构,便于遍历和操作;SAX是事件驱动的,逐个处理XML元素,适合处理大文件。 XPath和XSLT: XPath是一种查询语言,用于在XML文档中查找信息,比如选取节点、计算数值...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于互联网上的数据交换、配置文件...通过这些实验,学习者可以加深对XML的理解,掌握XML的基本操作,为实际开发中处理结构化数据打下坚实基础。
DOM解析器将整个XML文档加载到内存中,形成一个树状结构,方便遍历和操作;SAX和StAX则是事件驱动的解析方式,逐个处理XML元素,适合处理大型XML文件。 XML与XSLT(Extensible Stylesheet Language Transformations...
- 基于DOM(Document Object Model)的解析:将整个XML文档加载到内存中,形成一个树形结构,方便遍历和操作。 - 基于SAX(Simple API for XML)的解析:事件驱动,逐行读取XML文档,只处理当前元素,节省内存。 ...
4. XML解析: - 非验证解析器:只读取和处理XML文档的结构,不验证其是否符合DTD或XML Schema。 - 验证解析器:在读取XML时会检查其是否符合预定义的规范。 5. DOM(Document Object Model): DOM将XML文档视为...
1. DOM解析:Document Object Model,将整个XML文档加载到内存中形成一个树形结构,方便遍历和操作。 2. SAX解析:Simple API for XML,事件驱动型解析,逐行读取,适用于大文件和内存有限的情况。 3. StAX:...
1. DOM(Document Object Model):Java中,XML解析的一种方式是DOM,它一次性加载整个XML文档到内存,形成一棵节点树,方便遍历和操作。 2. SAX(Simple API for XML):另一种解析方式是SAX,它是基于事件驱动的,...