【问题标题】:How to read self closing tag's attribute in xml?如何在xml中读取自闭标签的属性?
【发布时间】:2016-04-30 04:46:45
【问题描述】:

我有这种类型的xml:

<trace>
    <string key="id" value="1"/>
    <event>
        <string key="Hello" value="1"/>
        <string key="World" value="2"/>
    </event>
    <event>
        <string key="Stack" value="3"/>
        <string key="Overflow" value="4"/>
    </event>
</trace>

我想在这里阅读关键属性。

我已经写了这段代码:

    try {

        File fXmlFile = new File("C:\\sampleXml.xes");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile.toString());

        doc.getDocumentElement().normalize();

        NodeList nListTrace = doc.getElementsByTagName("trace");

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

            Node nNode = nListTrace.item(j);

            NodeList nListEvent = doc.getElementsByTagName("event");

            for(int i = 0 ; i < nListEvent.getLength(); i++){

                Node nNodeEvent = nListEvent.item(i);

                Element eElement = (Element) nNodeEvent;

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

            }
        }

    } catch(Exception e){
        e.printStackTrace();
    }

如何获取事件中的所有元素?如何访问具有自闭合标签的元素中的属性?

【问题讨论】:

标签: java xml parsing dom xml-parsing


【解决方案1】:

如果您想迭代 XML 的 结构,请不要在嵌套循环中使用 doc.getElementsByTagName()。该方法基本上忽略 XML 结构并定位给定名称的所有元素,无论元素位于何处。

首先,如果&lt;trace&gt; 是根元素,为什么还要使用getElementsByTagName("trace")。只需调用doc.getDocumentElement() 即可获取根元素。

另外,无论一个标签是&lt;string key="id"/&gt;还是&lt;string key="id"&gt;&lt;/string&gt;,结果DOM树都是一样的,所以在使用DOM时,处理自闭标签没有特殊考虑。

如果你想迭代 &lt;event&gt; 元素的内容,你可以:

  1. 使用elem.getFirstChild()elem.getNextSibling() 迭代子节点。
  2. 使用elem.getChildNodes()迭代子节点。
  3. 使用elem.getElementsByTagName("...")迭代后代元素。

注意选项3只返回元素,但搜索所有后代,而选项1和2返回所有节点类型,但只返回直接子节点。

【讨论】:

    【解决方案2】:

    访问属性如下:

                Element traceElem = doc.getDocumentElement();
                Element elem = (Element) traceElem.getElementsByTagName( "string" ).item( 0 );
                System.out.println( elem.getAttribute( "key" ));
                System.out.println( elem.getAttribute( "value" ));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 2022-01-17
      • 1970-01-01
      • 2016-03-10
      相关资源
      最近更新 更多