`
popjxc
  • 浏览: 67549 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XML中的QName和Namespace的实例演示

    博客分类:
  • XML
阅读更多

 

在处理emf生成的xml文件时,遇到了如下xml片段:

 

 

<?xml version="1.0" encoding="UTF-8"?>

<root xmlns:xmi="http://www.omg.org/XMI">
  <node id="12345" xmi:id="54321"/>
</root>
 

 

node节点有id和xmi:id两个属性,用普通的的方法element.attributeValue("xmi:id"),得到的值有时是12345,有时却是54321,貌似是优先取第一个遇到的属性。

要想分别取得id和xmi:id的值,就要用到QName和Namespace的概念。

Namespace分为prefix和uri,prefix就是那个属性前缀xmi,url就是等号右边的http://www.omg.org/XMI。

例如上段xml中在root中定义了一个Namespace: xmlns:xmi="http://www.omg.org/XMI"。

Qname比普通节点多了一个前缀,这个前缀就是Namespace中的前缀。实际上QName就是说在一个指定命名空间下的属性。

综上,可以看出id和xmi:id是在不同命名空间下的属性,使用QName可以很容易进行他们的读写操作。下面以dom4j来演示他们的读写区别。

先来个写xml文件的:

Document document = DocumentHelper.createDocument();
Element root = document.addElement("root");
root.add(Namespace.get("xmi", "http://www.omg.org/XMI"));
Element ele = root.addElement("node");

// write id="12345"
QName qname = QName.get("id");
ele.addAttribute(qname, "12345");

// write xmi:id="54321"
qname = QName.get("id", root.getNamespaceForPrefix("xmi"));
ele.addAttribute(qname, "54321");
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter output = new XMLWriter(new FileOutputStream(new File(
					"c:/test.xml")), format);
output.write(document);
output.close();
 

读取xml和写类似:

// read id="12345"
QName qname1 = QName.get("id");
String id = ele.attributeValue(qname1);
System.out.println(id);

// read xmi:id="54321"
qname1 = QName.get("id", root.getNamespaceForPrefix("xmi"));
String xmi_id = ele.attributeValue(qname1);
System.out.println(xmi_id);
 
2
4
分享到:
评论

相关推荐

    [转载] JAXB中Java对象和XML之间的转换

    6. **Namespace和QName**: 在处理包含命名空间的XML时,JAXB使用`javax.xml.namespace.QName`来表示带有命名空间的元素和属性。`QName`包含了本地名称和命名空间URI。 7. **自定义转换**: 当标准注解无法满足需求时...

    javax.xml.rpc相关jar包

    在Java编程环境中,XML(eXtensible Markup Language)是一种重要的数据交换格式,广泛用于不同系统之间的通信。而`javax.xml.rpc`是Java平台标准版(Java SE)的一部分,它提供了一组API来支持Web服务的开发。这个...

    Flex处理 xml方法及实例

    4. **Namespace**: 用于处理XML文档中的命名空间,可以定义和引用命名空间。 在操作XML数据时,E4X提供了许多方便的方法。比如,`appendChild()`方法可以用来添加新的XML节点,如`myXML.appendChild(newItem)`。...

    javax.xml-1.3.4

    `QName`用于表示XML命名空间中的元素和属性名,包含本地名称和命名空间URI两部分。这对于处理具有复杂命名空间的XML文档尤其重要。 最后,`javax.xml.stream`子包引入了StAX(Streaming API for XML),这是一种低...

    JAVA调用webservice并解析xml

    在Java中,我们通常使用Apache CXF或JAX-WS(Java API for XML Web Services)框架来创建和调用Web服务。以下是一个简单的步骤概览: 1. **添加依赖**:首先,确保你的项目包含相应的库,如Apache CXF或JAX-WS的JAR...

    python处理XML文档

    Python是一种功能强大的编程语言,广泛应用于数据处理和分析。在处理XML文档时,Python提供了多种...在实际应用中,结合其他Python库如lxml(提供更丰富的XPath支持和SAX解析),可以进一步提高XML处理的灵活性和性能。

    AS3中新的XML处理方法.pdf

    ActionScript 3.0正式纳入了E4X的支持,其中包括XML、XMLList、QName和Namespace等关键类。 #### E4X设计目标 E4X的设计旨在实现以下几个目标: 1. **简单性**:E4X力求使处理XML数据的代码编写简单且易于理解。 2...

    CXF创建Webservice接口与Spring整合实例

    2. **定义服务接口**:在Java中,你需要创建一个JAX-WS(Java API for XML Web Services)的接口,定义Web服务的方法和参数。例如: ```java @WebService public interface UserService { @WebMethod User ...

    用JAXB生成一个XML

    为了使用JAXB从XML模式中生成Java类,首先需要确保以下工具和库已经正确配置: 1. **JAXB API类库**:这是JAXB的核心组件之一,用于提供API来处理XML绑定。 2. **XJC工具**:XJC是JAXB提供的一个编译器,用于从XML ...

    java调用webservice实例

    1. **导入必要的类库**:首先,代码导入了多个类库,包括`java.util`下的集合类,`javax.xml.namespace`下的`QName`用于命名空间操作,`org.apache.axis.client`下的`Call`和`Service`类,这些是Apache Axis的核心类...

    xml内容解析,包含命名空间时需特殊处理(dom4j)

    在IT行业中,XML(eXtensible Markup Language)是一种用于标记数据的标准格式,它允许我们以结构化的方式存储和传输信息。XML文档可以包含命名空间(Namespaces),这是为了避免元素名称冲突,特别是在大型项目或跨...

    WEBSERVICE实例

    import javax.xml.namespace.QName; import org.apache.soap.server.SOAPService; public class HelloService extends SOAPService { public HelloService() { super(new QName("http://example.com/", ...

    用java调用ebservices三种方式.doc

    这些方法主要依赖于Java API for XML-based RPC (JAX-RPC) 和 JSR 109规范,它们提供了Java与XML以及XML与Java之间的映射,以及在J2EE环境中实现Web服务的API。 首先,JAX-RPC是Java到XML和XML到Java数据类型转换的...

    dom4j基础知识要点

    4. **命名空间(Namespace)操作**:dom4j 支持处理XML中的命名空间,可以使用 `Namespace` 类和相关的API来操作。 六、Qname 介绍 QName( Qualified Name)在XML中表示带有命名空间前缀的本地名称,dom4j 中的 `...

    dom4J完整jar下载

    你可以为Element添加命名空间,通过使用Namespace类和QName(限定名称)来处理带有命名空间的元素和属性。 另外,DOM4J提供了EventReader和EventWriter,它们分别用于XML事件的读取和写入,适用于处理大型XML文档时...

    dom4j从基础到精

    QName( Qualified Name )是XML中用于标识命名空间的名称,它由一个可选的前缀和一个必需的本地名称组成,如`{namespaceURI}localName`。在dom4j中,QName用于处理命名空间相关的元素和属性。 ### 七、Visitor模式...

    Axis开发Web Service的实例

    import javax.xml.namespace.QName; import javax.xml.rpc.ServiceException; import java.net.MalformedURLException; import java.rmi.RemoteException; public class SayHelloClient2 { public static ...

    Axis2发布以及调用webservice具体实例

    import javax.xml.namespace.QName; import javax.xml.ws.Service; import java.net.URL; public class HelloWorldClient { public static void main(String[] args) throws Exception { // URL pointing to the ...

    用java调用webservices的三种方式

    为了确保Java在调用WebServices时能够保持一致性和互操作性,业界定义了两个重要的规范:JSR101(Java API for XML-based RPC,JAX-RPC)和JSR109(Implementing Enterprise Web Services)。 - **JSR101(JAX-RPC...

    Axis开发Web Service实例

    import javax.xml.namespace.QName; import javax.xml.rpc.ServiceException; import java.net.MalformedURLException; import java.rmi.RemoteException; public class TestHelloClient { public static ...

Global site tag (gtag.js) - Google Analytics