我有这种类型的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()
我如何获得活动中的所有元素?如何访问具有自闭标记的元素中的属性?
答案 0 :(得分:0)
如果要迭代XML的结构,请不要在嵌套循环中使用doc.getElementsByTagName()
。该方法基本上忽略XML结构并定位给定名称的所有元素,无论元素所在的位置。
首先,如果getElementsByTagName("trace")
是根元素,为什么要使用<trace>
。只需调用doc.getDocumentElement()
即可获取根元素。
此外,无论标签是<string key="id"/>
还是<string key="id"></string>
,结果DOM树都将完全相同,因此在使用DOM时,没有特别考虑处理自闭标签。
如果要迭代<event>
元素的内容,您可以:
elem.getFirstChild()
和elem.getNextSibling()
迭代子节点。elem.getChildNodes()
迭代子节点。elem.getElementsByTagName("...")
迭代后代元素。请注意,选项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" ));