`
zxs19861202
  • 浏览: 915182 次
  • 性别: Icon_minigender_1
  • 来自: 湖北—》上海
社区版块
存档分类
最新评论

Dom4j解析节点带前缀的XML文档(命名空间)

阅读更多

import java.io.StringReader;
import java.util.HashMap;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;
import org.xml.sax.InputSource;

 


public class Test {
 
 
 //获取document对象
  public Document getDocument(String xml) throws DocumentException
  {
   StringReader read = new StringReader(xml);
      //创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
      InputSource source = new InputSource(read);
      //创建一个新的SAXBuilder
      SAXReader sb = new SAXReader();
    
          //通过输入源构造一个Document
      Document doc = sb.read(source);
          //取的根元素
      return doc;
  }
 
  //获取带有命名空间的节点
  public Element getDestElement(Document doc)
  {
   HashMap<String,String> xmlMap = new HashMap<String,String>();
   xmlMap.put("tns","
http://www.99bill.com/schema/fo/settlement");
  
   XPath xpath=doc.createXPath("//tns:status"); //要获取哪个节点,改这里就可以了
   xpath.setNamespaceURIs(xmlMap);
   return (Element)xpath.selectSingleNode(doc);
  }


 
 public void jie()
 {
  String b=
   "<tns:batchid-query-response xmlns:ns0='http://www.99bill.com/schema/commons' xmlns:ns1='http://www.99bill.com/schema/fo/commons' xmlns:tns='http://www.99bill.com/schema/fo/settlement'>"+
     "<tns:response-header>"+
       "<tns:version xmlns:tns='http://www.99bill.com/schema/fo/commons'>"+
         "<ns0:version>1.0.1</ns0:version>"+
         "<ns0:service>fo.api.query</ns0:service>"+
       "</tns:version>"+
       "<ns1:time>20100811160633</ns1:time>"+
     "</tns:response-header>"+
     "<tns:response-body>"+
       "<tns:query-condition>"+
         "<tns:batch-no>SZ0806003</tns:batch-no>"+
         "<tns:page>1</tns:page>"+
         "<tns:page-size>20</tns:page-size>"+
         "<tns:list-flag>0</tns:list-flag>"+
       "</tns:query-condition>"+
       "<tns:total-page>1</tns:total-page>"+
       "<tns:total-cnt>2</tns:total-cnt>"+
       "<tns:batchList>"+
         "<tns:payer-acctCode>1001162953701</tns:payer-acctCode>"+
         "<tns:batch-no>SZ0806003</tns:batch-no>"+
         "<tns:apply-date>20100806103600</tns:apply-date>"+
         "<tns:name>大批量结算产品测试账户005</tns:name>"+
         "<tns:total-amt>10000</tns:total-amt>"+
         "<tns:total-cnt>2</tns:total-cnt>"+
         "<tns:fee-type>1</tns:fee-type>"+
         "<tns:cur>RMB</tns:cur>"+
         "<tns:checkAmt-cnt>0</tns:checkAmt-cnt>"+
         "<tns:batch-fail>1</tns:batch-fail>"+
         "<tns:recharge-type>0</tns:recharge-type>"+
         "<tns:auto-refund>0</tns:auto-refund>"+
         "<tns:phoneNote-flag>0</tns:phoneNote-flag>"+
         "<tns:merchant-memo1>memo1</tns:merchant-memo1>"+
         "<tns:merchant-memo2>memo2</tns:merchant-memo2>"+
         "<tns:merchant-memo3>memo3</tns:merchant-memo3>"+
         "<tns:status>111</tns:status>"+
         "<tns:order-seq-id>7368788</tns:order-seq-id>"+
         "<tns:total-applySucc-amt>10000</tns:total-applySucc-amt>"+
         "<tns:total-applySucc-cnt>2</tns:total-applySucc-cnt>"+
         "<tns:total-fee>1000</tns:total-fee>"+
         "<tns:finishPay-date>20100806105604</tns:finishPay-date>"+
         "<tns:memo/>"+
         "<tns:pay2bank-list>"+
           "<tns:pay2bank-result>"+
             "<tns:apply-date>20100806103600</tns:apply-date>"+
             "<tns:end-date>20100806105604</tns:end-date>"+
             "<tns:order-seq-id>7369556</tns:order-seq-id>"+
             "<tns:fee>500</tns:fee>"+
             "<tns:status>112</tns:status>"+
             "<tns:error-code>9113</tns:error-code>"+
             "<tns:error-msg>客户姓名不符</tns:error-msg>"+
             "<tns:bank-error-code/>"+
             "<tns:bank-error-msg/>"+
             "<tns:pay2bank>"+
               "<ns1:merchant-id>20100806_005</ns1:merchant-id>"+
               "<ns1:memo>快钱交易备注</ns1:memo>"+
               "<ns1:bank-purpose>理赔</ns1:bank-purpose>"+
               "<ns1:bank-memo>银行交易备注</ns1:bank-memo>"+
               "<ns1:payee-note>付款</ns1:payee-note>"+
               "<ns1:payee-mobile>13891819014</ns1:payee-mobile>"+
               "<ns1:payee-email>zhenzhen.sun@99bill.com</ns1:payee-email>"+
               "<ns1:period/>"+
               "<ns1:merchant-memo1>1</ns1:merchant-memo1>"+
               "<ns1:merchant-memo2>2</ns1:merchant-memo2>"+
               "<ns1:merchant-memo3>3</ns1:merchant-memo3>"+
             "</tns:pay2bank>"+
           "</tns:pay2bank-result>"+
         
         "</tns:pay2bank-list>"+
       "</tns:batchList>"+
     "</tns:response-body>"+
   "</tns:batchid-query-response>";
  
  
  try {
   Document doc=this.getDocument(b);
   Element el=this.getDestElement(doc);
   System.out.println("*********"+el.getText());
   
   
  } catch (DocumentException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  }


 }
 

 public static void main(String[] args) {
  
  Test t=new Test();
  t.jie();
  

 }

}

分享到:
评论
1 楼 ohano_javaee 2013-10-08  
如果属性也有前缀,怎么读取?

相关推荐

    dom4j 读取带有命名空间的xml文件

    在处理带有命名空间的XML文件时,DOM4J库显得尤为重要,因为XML命名空间是XML规范中一个关键的概念,用于避免元素名称的冲突。 XML命名空间的引入是为了在一个文档中使用来自不同来源的元素和属性。它们通过URI...

    Demo4j和XPath解析XML的文件路径表达式(ZVON.org - X 路径教程)

    DOM4J提供了注册命名空间的方法,以正确解析带有前缀的XPath表达式。 总结来说,Demo4j虽然不直接支持XPath,但通过结合DOM4J这样的XML库,我们可以方便地在Java应用程序中利用XPath的强大功能。通过理解XPath的...

    dom4j帮助文档chm(1.6.1)

    7. **Namespace支持**: 对于处理包含命名空间的XML文档,DOM4J提供了方便的API来处理命名空间和前缀。 8. **XML编写**: DOM4J不仅用于解析XML,还可以用于创建新的XML文档或修改现有文档。`DocumentWriter`和`...

    dom4j从基础到精通.docx

    dom4j 是一个高效、强大且易于使用的 Java XML API,它提供了处理 XML 文档的各种功能。作为一个开源项目,dom4j 可以在 SourceForge 上获取,其优秀的表现赢得了广大开发者的好评。在性能、功能和易用性方面,dom4j...

    dom4j从基础到精通

    在 dom4j 中,`QName` 用于表示具有命名空间的节点或属性。 七、Visitor 模式 dom4j 实现了设计模式中的 Visitor 模式,允许遍历 DOM 树并执行自定义操作,而无需更改节点类。通过实现 `Visitor` 接口并调用 `...

    Axis2 SOAP XML报文节点首字母小写转大写,节点命名空间前缀添加与剔除(JAVA)

    在处理SOAP XML报文时,我们可能遇到一些规范性问题,例如节点首字母大小写的转换,以及节点命名空间前缀的添加与剔除。本文将深入探讨这些问题,并提供相应的解决方案。 首先,关于SOAP XML报文中的节点首字母大小...

    DOM4J从基础到精通

    QName是DOM4J中用于表示带有命名空间的元素或属性名称的类。它允许用户明确地指定元素或属性属于哪个命名空间,这对于处理含有多个命名空间的XML文档非常重要。 ```java QName qname = new QName("元素名", ...

    dom4j源码类.rar

    处理XML命名空间是DOM4J的一个重要特性,它提供了`Namespace`类来处理XML文档中的命名空间前缀和URI,确保在操作XML时正确处理命名空间相关的元素和属性。 6. **Attribute和Text类** `Attribute`类代表XML元素的...

    dom4j-2.1.0

    DOM4J提供了多种解析XML文档的方法。它可以使用SAX(Simple API for XML)或DOM(Document Object Model)解析器,同时还支持StAX(Streaming API for XML)。这些解析器各有优势,例如SAX适用于大文件,因为它按需...

    dom4j-1.6.1版本的jar

    6. **命名空间处理**:DOM4J支持XML命名空间,这对于处理包含命名空间的XML文档至关重要。它可以解析并处理带有前缀的XML元素和属性。 7. **事件处理**:DOM4J支持SAX事件处理,可以注册事件监听器来响应XML解析...

    dom4j官方jar包+API

    6. **命名空间(Namespace)**:处理XML文档时,DOM4J提供了处理命名空间的能力,这对于处理包含多个前缀的复杂文档至关重要。 **DOM4J的主要功能** 1. **解析XML**:DOM4J提供多种解析器,如SAXReader和DOMReader,...

    dom4j-1.6.1和API

    - **Element(元素)**: 在 DOM4J 中,XML 文档中的每个节点都由 Element 对象表示。Element 可以包含其他 Element、Text、Attribute 等子节点。 - **Attribute(属性)**: 表示 XML 元素的属性,例如 `...

    Demo4j解析XML文档实例和方法总结(经典)

    - XML命名空间(Namespace)处理:在处理包含命名空间的XML文档时,需要正确处理命名空间前缀和URI。 - DTD(Document Type Definition)和XML Schema:这两种是XML文档的验证方式,Demo4j可能会展示如何在解析时...

    XPATH读取有命名空间的节点

    总结来说,处理带有命名空间的XML文档,特别是在使用XPath时,需要理解XML命名空间的概念,掌握DOM4J的命名空间注册方法,并能够正确构造XPath表达式。这样,即使面对复杂的XML结构,也能游刃有余地进行数据提取和...

    dom4j基础知识要点

    QName( Qualified Name)在XML中表示带有命名空间前缀的本地名称,dom4j 中的 `QName` 类用于处理这种名称。它可以存储命名空间URI和本地名称,并在需要时转换为完整的XML名称。 七、Visitor 模式 dom4j 实现了...

    dom4j 操作详解

    DOM4J 是一个 Java 库,用于处理 XML 文档,它提供了灵活且高效的方式来解析、创建、修改 XML 内容。DOM4J 基于 DOM(文档对象模型)的概念,但相比标准 DOM,它更轻量级且易于使用。在本文中,我们将深入探讨如何...

    dom4j从基础到精

    dom4j是一个针对Java平台的高效、灵活的XML处理库,它提供了一系列API来创建、解析、修改XML文档。作为开源软件,dom4j在SourceForge上可获取,并且在性能、功能和易用性方面表现出色。其广泛应用于Java项目中,包括...

    dom4j相关操作源码

    7. **命名空间处理**:DOM4J也支持XML的命名空间。`Namespace`对象代表一个命名空间,`Element`上的`createNamespace(String uri, String prefix)`方法可以创建新的命名空间,而`getNamespaceForPrefix(String ...

    XML教程之DOM对象参考手册 chm

    DOM支持处理命名空间,包括定义命名空间前缀和解析命名空间URI。 对于初学者来说,理解和掌握DOM对象的使用是掌握XML处理的关键。这个“XML教程之DOM对象参考手册”提供了详细的操作指南,无论是在Web开发、服务器...

Global site tag (gtag.js) - Google Analytics