如何在xml中读取自闭标签的属性?

时间:2016-01-23 16:49:05

标签: java xml parsing dom xml-parsing

我有这种类型的xml:

    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();
    }

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

我已经写了这段代码:

&.inArray()

我如何获得活动中的所有元素?如何访问具有自闭标记的元素中的属性?

2 个答案:

答案 0 :(得分:0)

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

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

此外,无论标签是<string key="id"/>还是<string key="id"></string>,结果DOM树都将完全相同,因此在使用DOM时,没有特别考虑处理自闭标签。

如果要迭代<event>元素的内容,您可以:

  1. 使用elem.getFirstChild()elem.getNextSibling()迭代子节点。
  2. 使用elem.getChildNodes()迭代子节点。
  3. 使用elem.getElementsByTagName("...")迭代后代元素。
  4. 请注意,选项3仅返回元素,但搜索所有后代,而选项1和2返回所有节点类型,但仅返回直接子节点。

答案 1 :(得分:0)

按以下方式访问属性:

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