简单的Dom4j解析XML

XML的格式如下:

<Data>
  <User Count="2">
  <User>
    <P>2017-01-31</P>
    <A1>A</A1>
    <A2>B</A2>
  </User>
  <User>
    <P>2017-01-31</P>
    <A1>A</A1>
    <A2>B</A2>
  </User>
</Data>
使用Dom4j解析XML获取所有User节点下面的节点值。代码如下:
try {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
builder = builderFactory.newDocumentBuilder();
Document document = builder.parse(String.valueOf(URL));//URL是指向XML的URL

if (document != null) {
Element rootElement = document.getDocumentElement();

NodeList OwnerNodeList = rootElement.getElementsByTagName("User");
int LengthOwnerNodeList = OwnerNodeList.getLength();//获取User节点的个数

for (int i = 0; i<LengthOwnerNodeList ; i++) //转换User节点为一个Element节点。解析Element,得到User下面的所有子节点       Element OwnerNode = (Element) OwnerNodeList.item(i);
            //String value = OwnerNode.getNodeName() + ":" + OwnerNode.getNodeValue();
//System.out.println(value);//这里输出为 (User:null)

int ALenghth = OwnerNode.getElementsByTagName("A").getLength();
if(ALenghth > 0){
String A = OwnerNode.getElementsByTagName("A").item(0).getTextContent();//通过getTextContent过的节点的值
System.out.println(A);
}

Node OwnerNameNode = OwnerNode.getElementsByTagName("OwnerName").item(0);
System.out.println(OwnerNameNode.getChildNodes().item(0).getNodeValue());//通过getNodeValue()方法也可以获得节点的值

NodeList nodeList = OwnerNode.getChildNodes();
System.out.println(nodeList.getLength());//nodeList:这里的nodeList包括了User节点下面的P A1 A2节点。
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
按照上面的代码可以解析包括两级关系的节点。3级层级关系的多级节点的代码逻辑在此代码的关系下可以推理。

首先我们在获取RootElement后,可以直接通过 getElementByTagName() 方法获得对应的节点值。例如,直接得到A1节点。
NodeList A1NodeList = rootElement.getElementsByTagName("A1");//A1NodeList有2个。遍历 A1NodeList,打印出A1NodeList的值。

假设有如下结构,

<A>
  <B>
    <C></C>
  </B>
</A>
得到RootElement后,得到A节点的NodeList,遍历A节点的NodeList,得到B节点。通过B节点得到C节点的NodeList。
NodeList ANodeList =
rootElement.getElementsByTagName("A");
String CValue = ((Element)((Element)ANodeList.item(0)).getElementsByTagName("B").item((0)))
.getElementsByTagName("C").item(0).getTextContent();
强制转换为Element,才可以通过 getElementByTagName 得到NodeList.

 



posted @ 2017-03-03 14:39  Dobic  阅读(280)  评论(0编辑  收藏  举报