【发布时间】:2013-10-06 17:28:12
【问题描述】:
我正在查看 StackOverflow,但找不到最佳答案。我需要在 JAVA 中读取 XML 文件。我的 XML 文件如下所示:`
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<server>
<server01>
<department>A1</department>
<department>A2</department>
</server01>
<server02>
<department>A1</department>
<department>A2</department>
</server02>
</server>
是否可以读取<server01> 和<server02> 之间的Java 元素,不包括文件的其余部分?或者我需要使用不同的标签?我找到了如何读取父节点的方法:
NodeList serversNames = xmlD.getDocumentElement().getChildNodes();
for (int i = 0; i < serversNames.getLength(); i++) {
Node node = serversNames.item(i);
if (node instanceof Element) {
Element childElement = (Element) node;
System.out.println("tag name: " + childElement.getTagName());
}
}
我能够读取所有部门标签并将它们保存到数组中:
NodeList serverName = xmlD.getElementsByTagName("department");
serversList = new String[serverName.getLength()];
System.out.println("zasieg: " + serverName.getLength());
for (int temp = 0; temp < serverName.getLength(); temp++) {
Element shareName = null;
shareName = (Element) serverName.item(temp);
serversList[temp] = shareName.getTextContent();
System.out.println(temp + " - " + serversList[temp]);
}
那么,是否有可能只读取父节点的元素?仅 SERVER01 的元素?
【问题讨论】:
-
你是说你在读完
的内容后要停止阅读文档,而不是读入 的内容吗?我认为您需要在程序中定义该逻辑,它不会真正成为任何 XML 解析器的一部分。 -
不清楚您要做什么或问题是什么。你不能只使用 XPath 或等效的吗?如果你使用事件驱动的解析器,你可以随时停止,如果它真的值得的话。
-
您可以使用xstream将XML转为对象,将对象转为XML,非常简单的方法将XML转为对象,将对象转为XML。
-
@MattN:不正确。解析 XML 标记有 2 种方法:DOM(将整个文件读入树形数据结构)和 SAX(在文件中流式传输并处理在解析过程中遇到的标签)。听起来像提前终止的基于 SAX 的 xml 解析方法会很好地满足 OP 的需求。见stackoverflow.com/questions/6828703/…