dom4j解析xml文件的问题

问题描述

需要解析的xml文件内容如下:<xxx><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:m0="http://group.unicom.com/xsd"><SOAP-ENV:Body><m:syncAreaInfo xmlns:m="http://service.unicom.com"><m:arg0><m0:operate_type>I</m0:operate_type><m0:area_code>001</m0:area_code><m0:area_name>String</m0:area_name><m0:area_frame>String</m0:area_frame><m0:order_no>0</m0:order_no><m0:parent_area_code>String</m0:parent_area_code><m0:start_date>String</m0:start_date><m0:end_date>String</m0:end_date><m0:area_level>0</m0:area_level><m0:validflag>String</m0:validflag><m0:remark>String</m0:remark><m0:para>String</m0:para><m0:para_id>String</m0:para_id><m0:para_value>String</m0:para_value></m:arg0></m:syncAreaInfo></SOAP-ENV:Body></SOAP-ENV:Envelope><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:m0="http://group.unicom.com/xsd"><SOAP-ENV:Body><m:syncAreaInfo xmlns:m="http://service.unicom.com"><m:arg0><m0:operate_type>D</m0:operate_type><m0:area_code>001</m0:area_code><m0:area_name>String</m0:area_name><m0:area_frame>String</m0:area_frame><m0:order_no>0</m0:order_no><m0:parent_area_code>String</m0:parent_area_code><m0:start_date>String</m0:start_date><m0:end_date>String</m0:end_date><m0:area_level>0</m0:area_level><m0:validflag>String</m0:validflag><m0:remark>String</m0:remark><m0:para>String</m0:para><m0:para_id>String</m0:para_id><m0:para_value>String</m0:para_value></m:arg0></m:syncAreaInfo></SOAP-ENV:Body></SOAP-ENV:Envelope></xxx>我要取到所有的<SOAP-ENV:Body>元素java 代码如下:public static void main(String[] args) {SAXReader saxReader = new SAXReader();try {Document document = saxReader.read("D:/syncAreaInfo.xml");List list=document.selectNodes("//m:arg0");Iterator iterator=list.iterator();while(iterator.hasNext()){Element node=(Element)iterator.next();System.out.println("node is "+node.getName());}} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}}但是貌似标签命中包含“:”就会出错org.dom4j.XPathException: Exception occurred evaluting XPath: //m:arg0. Exception: XPath expression uses unbound namespace prefix mat org.dom4j.xpath.DefaultXPath.handleJaxenException(DefaultXPath.java:374)at org.dom4j.xpath.DefaultXPath.selectNodes(DefaultXPath.java:134)at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:166)at com.unicom.service.XmlParser.main(XmlParser.java:20)Exception in thread "main" 如果把“:”换成“-”就没有问题,但这个文件时别人传过来的,格式就是这样又不能改,请问怎样才能取到这些节点呢

解决方案

XML中,ooo:xxx中,ooo是命名空间。XML里有xmlns:m="http://service.unicom.com"这样的声明,但是Java程序里没有。所以,处理带命名空间的XML的时候,应该告诉Java程序,每个命名空间前缀(比如“m”)具体代表什么命名空间,(比如“http://service.unicom.com”)。package dom4jnstest;import java.util.Collections;import java.util.Iterator;import java.util.List;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.xpath.DefaultXPath;public class Dom4jNsTest {public static void main(String[] args) throws Exception {SAXReader saxReader = new SAXReader();Document document = saxReader.read(Dom4jNsTest.class.getResourceAsStream("x.xml"));DefaultXPath xpath = new DefaultXPath("//m:arg0");xpath.setNamespaceURIs(Collections.singletonMap("m","http://service.unicom.com"));List list = xpath.selectNodes(document);Iterator iterator = list.iterator();while (iterator.hasNext()) {Element node = (Element) iterator.next();System.out.println("node is " + node.getName());}}}
解决方案二:
一楼正解!
解决方案三:
楼上正解。

时间: 2024-09-19 06:59:05

dom4j解析xml文件的问题的相关文章

dom4j解析xml文件实例

dom4j解析xml文件实例     package com.yanek.demo.xml.test; import java.io.File;import java.util.List; import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader; public class Dm4jReadXml {  /**  * @pa

Dom4j解析xml文件

时间:2003.12.15   版权声明: 本文由冰云完成,首发于CSDN,未经许可,不得使用于任何商业用途. 文中代码部分引用自DOM4J文档. 欢迎转载,但请保持文章及版权声明完整. 如需联络请发邮件:icecloud(AT)sina.com       DOM4J是dom4j.org出品的一个开源XML解析包,它的网站中这样定义: Dom4j is an easy to use, open source library for working with XML, XPath and XSL

java dom4j解析xml文件代码实例分享_java

解析xml文件有两种方式,一种是利用Dom去解析,这种方式写起代码比较麻烦,对于刚入手的程序员来说比较容易出问题:第二种就是使用Dom4j包去解析在要使用Dom4j包的时候,肯定要先引入包 复制代码 代码如下: import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.Writer;import java.util.Iterator; import org.dom4j.Docum

使用DOM4j解析XML文件,由于xmls和scheme存在无法正常利用Xpath方法取到节点

问题描述 经过测试,发现问题出在下面两个xml语句上.<CNML xmlns="http://www.cnml.org.cn/2005/CNMLSchema"><NameTopic scheme="urn:cnml:xinhua.org:20070701:topiclist.cnml-Organization-1:1" topicRef="Xinhua">xmlns和scheme是特殊的属性吗,如果把这两个属性去掉就可以正

深入浅出如何解析xml文件---上篇

    xml小伙伴们并不陌生,xml是可扩展标记语言,标准通用标记语言语言的子集,是一种用来标记电子文件使其具有结构性的标记语言.我们知道xml可以用dom与sax等方法进行解析,但是xml为什么要解析呢?为什么html就不用解析?小伙伴们可以思考一下,我们知道xml和html都是标签化的代码,其实也都是网页的一种写法,但是浏览器决定了显示什么,也就是浏览器直接解析html的基本标签,目前来说xml从一种网页应用,走向了一种格式化信息的应用,因为,我们需要使用xml里的这些信息,所以我们需要解

java-关于使用dom4j处理xml文件报错

问题描述 关于使用dom4j处理xml文件报错 相同的代码,在JAVA工程里可以运行 然而我在android工程中调用的时候,却出现了问题!,程序在第一步URL url = new URL("http://api.map.baidu.com/telematics/v3/weather?location=%E9%95%87%E6%B1%9F&ak=4Xyifj6ty3WCLeLIgANbGR0N");好像就失败了,似乎无法打开....求大神告诉一下怎么解决 解决方案 实例037

JS操作XML实例总结(加载与解析XML文件、字符串)_javascript技巧

本文实例讲述了JS操作XML的方法.分享给大家供大家参考,具体如下: 我的xml文件Login.xml如下. <?xml version="1.0" encoding="utf-8" ?> <Login> <Character> <C Text="热血" Value="0"></C> <C Text="弱气" Value="1&qu

java读取解析xml文件实例_java

读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵. DOM解析的特性就是读取xml文件转换为 dom树形结构,通过节点进行遍历. 这是W3c关于节点的概念 如果xml中包含有大量的数据,由于dom一次性把xml装入内存中的特性,所以dom不适合于包含大量数据的xml解析.当包含有大量xml的时候,用SAX进行解析比较节省内存. 下面是一个运用DOM进行解析xml文件的例子: xml文件结构如下: <?xm

dom4j生成和解析xml文件

要生成和解析如下格式的xml文件:  代码如下 复制代码 <?xml version="1.0" encoding="UTF-8"?> <Message xmlns:xs="http://www.w3.org/2001/XMLSchema">   <User>     <id>1</id>     <name>李寻欢</name>     <age>3