解析XML文档以获取节点值

时间:2017-05-25 05:56:23

标签: java xml-parsing

我有一个xml结构如下:

String attributesXML="<entry>
            <value>
              <List>
                <String>Rob</String>
                <String>Mark</String>
                <String>Peter</String>
                <String>John</String>
             </List>
          </value>
        </entry>"

我想获取值Rob,Mark,Peter,John。我可以从入口节点(下面的代码)开始获取节点。问题是我不知道入口节点下的子节点名称是什么。从入口节点开始,我需要继续向下钻取,直到找到值。我写了一个方法getChildNodeValue()但它没有给我所需的输出。它确实打印了我需要的东西,但它也打印了一些额外的东西。我需要从这个方法getChildNodeValue()返回值作为csv。

获取条目节点:

    DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
                    InputSource is = new InputSource();
                    is.setCharacterStream(new StringReader(attributesXML));

                    Document doc = db.parse(is);
                    NodeList nodes = doc.getElementsByTagName("entry");
for (int i = 0; i < nodes.getLength(); i++) {

                if(nodes.item(i).hasChildNodes()){

                    getChildNodeValue(nodes.item(i));

                }
} 


public static void getChildNodeValue(Node node) {

    System.out.println("Start Node: "+node.getNodeName());

    NodeList nodeList = node.getChildNodes();
    for (int i = 0; i < nodeList.getLength(); i++) {
      Node currentNode = nodeList.item(i);

       while(currentNode.hasChildNodes()){

           System.out.println("Current Node: "+currentNode.getNodeName());

           nodeList = currentNode.getChildNodes();

          for(int j=0;j<nodeList.getLength();j++){

              currentNode = nodeList.item(j);
              System.out.println("Node name: "+currentNode.getNodeName());
              System.out.println("Node value: "+currentNode.getTextContent());

          }

       }

    }
}

1 个答案:

答案 0 :(得分:0)

你可以简单地使用XStream库进行xml解析,它会将java对象解析为xml,反之亦然。 看看下面的链接 http://x-stream.github.io/tutorial.html