java - 如何仅迭代该节点并获取值

标签 java xml parsing jaxb

我有以下 XML,其中有某些节点。我必须获取状态节点的值。由于状态节点发生多次,我必须检查它发生了多少次并按节点顺序获取值。

> <?xml version="1.0" encoding="UTF-8"?> 
>         <Country>       
>             <name>India</name>
>             <capital>New Delhi</capital>
>             <population>120crores</population>
>         .
>         .
>         .
>         .
>         .
>     
>     <states>
>         <state>
>             <name>Maharastra</name>
>             <pincode>xyzzzz</pincode>
>             <capital>Mumbai</capital>
>     
>         <\state>
>     
>         <state>
>         .
>         .
>         .
>         </state>
>     </states>
>     
>     
>        <\Country>

我有以下代码部分,我将在其中检查节点长度,但我不知道如何迭代它。

>     DocumentBuilderFactory dof=DocumentBuilderFactory.newInstance();
>       DocumentBuilder db=dof.newDocumentBuilder();
>       org.w3c.dom.Document doc=db.parse(new InputSource(new StringReader(statestring)));
>       node=doc.getElementsByTagName("state");

{
            int size=node.getLength();

            for(int i=0;i<size;i++)
            {
                //how to put the logic here     
            }


        }

最佳答案

试试这个:

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;

public class ReadXMLFile {

  public static void main(String argv[]) {

    try {

    File fXmlFile = new File("c://input.xml");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(fXmlFile);
    doc.getDocumentElement().normalize();

    System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

    NodeList nList = doc.getElementsByTagName("state");

    System.out.println("----------------------------");

    for (int temp = 0; temp < nList.getLength(); temp++) {

        Node nNode = nList.item(temp);

        System.out.println("\nCurrent Element :" + nNode.getNodeName());

    if (nNode.getNodeType() == Node.ELEMENT_NODE) {

            Element eElement = (Element) nNode;
            System.out.println("Name : " + eElement.getElementsByTagName("name").item(0).getTextContent());
            System.out.println("pincode : " + eElement.getElementsByTagName("pincode").item(0).getTextContent());
            System.out.println("capital : " + eElement.getElementsByTagName("capital").item(0).getTextContent());
        }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
  }

}

关于java - 如何仅迭代该节点并获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29300267/

相关文章:

java - 我可以通过 JNI 调试以 native 代码创建的 JVM 吗?

parsing - 标准化 NFL 球队名称

scala - java.io.Serialized 和 GenTraversableOnce 类型不匹配

java - VTD-XML:如何不从根元素执行 XPath 查询

xml - 如何更改 Sublime Text2 中 JSON `Key` 的颜色

parsing - 扑克牌范围解析器...我该如何编写语法?

java - java.lang.reflect.Array 的 getter 和 setter 方法的目的是什么?

java - 使用 FileDownloader 时延迟确定文件名

java - 什么是 "th"、 "python"、 "python3"、 "java"等...用于运行脚本的命令前面,称为?

xml - XSL迭代平面XML结构