如何提取具有ID但没有子值的子元素的值?

时间:2016-05-17 04:47:45

标签: java xml parsing dom xml-parsing

我必须解析XML:

<?xml version="1.0" encoding="utf-8"?>
<data>
  <index id="firstName">Ankit</index>
  <index id="LastName">Negi</index>
  <index id="Work">freelance</index>
</data>

如何使用dom解析器以下列格式获取值:

firstName : Ankit

我陷入困境并且非常困惑,以至于我无法继续前进。以下是我的代码:

    // after getting the document .. 

    doc.getDocumentElement().normalize();
    System.out.println(doc.getDocumentElement().getNodeName());
    //NodeList nodeList = doc.getChildNodes();
    NodeList nodeList = doc.getDocumentElement().getChildNodes();
    for(int i=0;i<nodeList.getLength();i++) {
        Node node = nodeList.item(i);

        if(node instanceof Element) {
            String nodeVal = node.getAttributes().getNamedItem("id").getNodeValue();
            String content = null;
            NodeList nodeLis = node.getChildNodes();

            for(int j=0;j<nodeLis.getLength();j++) {
                Node n1 = nodeLis.item(j);
                if(n1 instanceof Element) {                     
                    content = n1.getNodeValue();    
                }                   
            }

            System.out.println("---------");
            System.out.println(nodeVal+" : "+content);
        }
    }

1 个答案:

答案 0 :(得分:1)

在dom中,一切都是节点。从注释到元素都是节点。您必须过滤ELEMENT_NODE,然后获取它的属性和内部文本。

doc.getDocumentElement().normalize();
Element elmt = doc.getDocumentElement();
NodeList nl = elmt.getChildNodes();
String k, v;
for(int i = 0; i < nl.getLength(); i++) {
    Node n = nl.item(i);
    if(n.getNodeType() == Node.ELEMENT_NODE){
        NamedNodeMap attrs = n.getAttributes();
        System.out.println(attrs.getNamedItem("id").getTextContent() + " : " + n.getTextContent());
    }
}