需要解析的xml文件内容如下:
SOAP-ENV:Body
m0:operate_typeI/m0:operate_type
m0:area_code001/m0:area_code
m0:area_nameString/m0:area_name
m0:area_frameString/m0:area_frame
m0:order_no0/m0:order_no
m0:parent_area_codeString/m0:parent_area_code
m0:start_dateString/m0:start_date
m0:end_dateString/m0:end_date
m0:area_level0/m0:area_level
m0:validflagString/m0:validflag
m0:remarkString/m0:remark
m0:paraString/m0:para
m0:para_idString/m0:para_id
m0:para_valueString/m0:para_value
/m:arg0
/m:syncAreaInfo
/SOAP-ENV:Body
/SOAP-ENV:Envelope
SOAP-ENV:Body
m0:operate_typeD/m0:operate_type
m0:area_code001/m0:area_code
m0:area_nameString/m0:area_name
m0:area_frameString/m0:area_frame
m0:order_no0/m0:order_no
m0:parent_area_codeString/m0:parent_area_code
m0:start_dateString/m0:start_date
m0:end_dateString/m0:end_date
m0:area_level0/m0:area_level
m0:validflagString/m0:validflag
m0:remarkString/m0:remark
m0:paraString/m0:para
m0:para_idString/m0:para_id
m0:para_valueString/m0:para_value
/m:arg0
/m:syncAreaInfo
/SOAP-ENV:Body
/SOAP-ENV:Envelope
我要取到所有的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 block
e.printStackTrace();
}
}
但是貌似标签命中包含“:”就会出错
org.dom4j.XPathException: Exception occurred evaluting XPath: //m:arg0. Exception: XPath expression uses unbound namespace prefix m
at 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"
如果把“:”换成“-”就没有问题,但这个文件时别人传过来的,格式就是这样又不能改,请问怎样才能取到这些节点呢