① java中怎么解析这样的文件
键值的话直接获取节点值, 你补充的那种形式要获取属性名和属性值即可。
用dom4j处理,要下载dom4j.jar包build path到项目里,然后你的xml内容要改一下,里面用双引号:
<?xml version="1.0" encoding="UTF-8"?>
<msg>
<head>
<transcode>9999</transcode>
<time>20090305102259</time>
<version> 1.0 </version>
</head>
<body>
<msg errorCode="9001" msg="系统异常" />
</body>
</msg>
代码
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class GetXMLMessage {
public static void main(String[] args) throws DocumentException
{
//读取XML文件,我直接放根目录下
File file = new File("your.xml");
Document doc = new SAXReader().read(file);
//获取根节点:即msg节点
Element element =doc.getRootElement();
//遍历子节点,也即<head>和<body>。
Iterator it = element.elementIterator();
while(it.hasNext())
{
Element subelement = (Element)it.next();
System.out.println("父节点"+subelement.getName());
//遍历head下面的transcode time cerson 和body下面的msg
Iterator subit = subelement.elementIterator();
while(subit.hasNext())
{
Element subsubelement =(Element) subit.next();
System.out.print("子节点"+subsubelement.getName()+" ");
System.out.println(subsubelement.getStringValue());
//如果有属性,则输出属性
List attributelist = subsubelement.attributes();
for(Object i:attributelist)
{
Attribute attribute =(Attribute)i;
System.out.print("属性"+attribute.getName()+" ");
System.out.println(attribute.getStringValue());
}
}
}
}
}
最后输出:
父节点head
子节点transcode 9999
子节点time 20090305102259
子节点version 1.0
父节点body
子节点msg
属性errorCode 9001
属性msg 系统异常