`
wangxinxin1212
  • 浏览: 29781 次
社区版块
存档分类
最新评论

dom4j操作带冒号的xml

阅读更多

        这几天被同事问道是否可以用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>

 

0
2
分享到:
评论

相关推荐

    Java实现XML解析【JDom】

    Java中的XML解析是处理XML数据的关键技术,JDom是一个高效的、纯Java的XML处理库,它为Java开发者提供了便捷的方式来创建、...在实际项目中,根据具体需求,还可以结合其他XML解析库,如DOM4J、XOM等,进行选择和使用。

    Delphi向XML中添加节点数据.rar

    Delphi7向常用的XML文件中添加内容,按照XML的节点规则依次写入内容,自定义各个节点及节点内容,具体的操作代码如下示:  var  iXml: IDOMDocument;  iRoot, iNode, iNode2, iChild, iAttribute: IDOMNode;  ...

    xml的基本操作实例(通讯录)

    XML元素和属性的名称必须遵循特定的规则,例如它们必须以字母、下划线或冒号开头,且只能包含字母、数字、下划线、冒点和冒号。 3. **XML文档声明**: 每个XML文档都应该以一个文档声明开始,如`&lt;?xml version=...

    xml学习代码

    - **DOM4J**: 是一个非常流行的Java库,用于处理XML,包括解析、操作和生成XML。 - **Apache Xerces**: 是一个开放源码的XML解析器,支持DOM、SAX和XSLT。 6. **XML在Web服务中的应用** - **SOAP (Simple Object...

    XML基本操作小部分

    在JavaScript中,可以使用DOM API来操作XML: ```javascript let xmlDoc = new DOMParser().parseFromString(xmlData, 'text/xml'); let nameNode = xmlDoc.getElementsByTagName('name')[0]; nameNode.textContent ...

    C# XML入门经典——C#编程人员必备的XML技能(中文)

    4. **C#中的XML操作**:在.NET框架中,有多种类库支持XML处理,如System.Xml命名空间下的XmlDocument、XPathDocument、XmlNodeReader等。这些类允许我们读取、写入、查询和操作XML文档。 5. **LINQ to XML**:C# ...

    XML网页制作实作教程源程序,xml代码,xml实例,xml初学者代码

    本教程将深入探讨XML在网页制作中的应用,帮助初学者理解并掌握XML的基本概念、语法以及实际操作。 1. XML基础 XML起源于SGML(Standard Generalized Markup Language),其核心理念是通过自定义标签来描述数据。...

    xml 综合帮助文档

    如XmlDocument用于DOM操作,XmlElement表示XML元素,XmlAttribute表示属性。LINQ to XML是C# 3.0引入的新特性,它提供了一种更简洁、类型安全的方式来创建和查询XML。 **XML实例** ```xml &lt;title lang="en"&gt;XML...

    xml基础学习手册

    1. DOM解析:将整个XML文档加载到内存中,形成一棵DOM树,便于遍历和操作。 2. SAX解析:逐行读取XML,事件驱动,只在需要时处理数据,节省内存。 3. StAX(Streaming API for XML):流式解析,允许向前移动的迭代...

    XML.rar_delphi XML_xml

    DOM(Document Object Model)模型是XML的一种树形表示,TXMLDocument就是基于DOM的,允许对XML文档进行增删改查操作。 8. **XML与数据库交互** 在Delphi中,可以使用XML数据绑定技术,将XML数据直接映射到数据库...

    XML 中文参考手册.zip

    四、XML解析 XML解析器负责读取XML文档并验证其是否符合规范。有两种主要的解析方式: 1. 预处理解析器(DTD或XML Schema):用于验证文档结构和数据。 2. 事件驱动解析器(SAX或DOM):SAX按需读取,占用内存少;...

    操作XML的实例很实用

    四、DTD(Document Type Definition)与XML Schema 为了验证XML文档的结构是否符合规定,可以使用DTD或XML Schema。DTD定义了一组规则,确保XML文档的结构和元素的使用是合法的。XML Schema则提供了更强大、更灵活的...

    Xml文件的操作.rar

    4. DTD(Document Type Definition)与XSD(XML Schema) DTD和XSD用于定义XML文档的结构和数据类型,确保数据的有效性和一致性。虽然此资源没有提及,但了解它们对于更严谨的XML处理是必要的。 5. 解析XML 在.NET...

    xml编程从入门到精通(PDF)

    DOM将整个XML文档加载到内存中,形成一棵树形结构,便于遍历和操作;SAX是事件驱动的,逐个处理XML元素,适合处理大文件。 XPath和XSLT: XPath是一种查询语言,用于在XML文档中查找信息,比如选取节点、计算数值...

    XML基础教程与实验指导课件

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于互联网上的数据交换、配置文件...通过这些实验,学习者可以加深对XML的理解,掌握XML的基本操作,为实际开发中处理结构化数据打下坚实基础。

    xml技术非常的好理解

    DOM解析器将整个XML文档加载到内存中,形成一个树状结构,方便遍历和操作;SAX和StAX则是事件驱动的解析方式,逐个处理XML元素,适合处理大型XML文件。 XML与XSLT(Extensible Stylesheet Language Transformations...

    xml学习指南 xml教程

    - 基于DOM(Document Object Model)的解析:将整个XML文档加载到内存中,形成一个树形结构,方便遍历和操作。 - 基于SAX(Simple API for XML)的解析:事件驱动,逐行读取XML文档,只处理当前元素,节省内存。 ...

    XML支持模块.rar

    4. XML解析: - 非验证解析器:只读取和处理XML文档的结构,不验证其是否符合DTD或XML Schema。 - 验证解析器:在读取XML时会检查其是否符合预定义的规范。 5. DOM(Document Object Model): DOM将XML文档视为...

    niit xml code 代码

    1. DOM解析:Document Object Model,将整个XML文档加载到内存中形成一个树形结构,方便遍历和操作。 2. SAX解析:Simple API for XML,事件驱动型解析,逐行读取,适用于大文件和内存有限的情况。 3. StAX:...

    xml精讲帮助文档 两个打包

    1. DOM(Document Object Model):Java中,XML解析的一种方式是DOM,它一次性加载整个XML文档到内存,形成一棵节点树,方便遍历和操作。 2. SAX(Simple API for XML):另一种解析方式是SAX,它是基于事件驱动的,...

Global site tag (gtag.js) - Google Analytics