我有一个与使用 java 进行 XML 解析 (org.w3c.dom) 相关的任务。
<?xml version="1.0" encoding="utf-8"?>
<documents>
<document id="001">
<metadata>
<primary-class>
<super-class super-class="some-value"/>
<sub-class sub-class="other-value"/>
</primary-class>
</metadata>
</document>
<document id="002">
<metadata>
<primary-class>
<super-class super-class="some-value"/>
</primary-class>
</metadata>
</document>
</documents>
我想收集两个不同的 ArrayList
中的 super-class
和 sub-class
值(sub-class
是可选的,因此如果有值,我们应该将其添加到 ArrayList
中,如果没有,则应将 null
添加到 ArrayList
中),在此示例中,输出应为:
[some-value][some-value]
[other-value][null]
最佳答案
感谢Element#getElementsByTagName(java.lang.String name)
,您可以首先获得后代元素primary-class
然后,对于每个元素,获取名称为 super-class
的第一个子元素,并获取名称为 sub-class
的第一个子元素(如果存在),否则使用 null
。
类似这样的事情:
// Parse my XML doc using a DOM parser
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(source);
// Get all descendant elements `primary-class`
NodeList nl = doc.getElementsByTagName("primary-class");
// Initialize my lists
int length = nl.getLength();
List<String> superClasses = new ArrayList<>(length);
List<String> subClasses = new ArrayList<>(length);
// For each element `primary-class` found
for (int i = 0; i < nl.getLength(); i++){
Element element = (Element) nl.item(i);
// Add the super class to the list
NodeList nlSuperClasses = element.getElementsByTagName("super-class");
superClasses.add(((Element) nlSuperClasses.item(0)).getAttribute("super-class"));
// Add the sub class to the list if it exists, null otherwise
NodeList nlSubClasses = element.getElementsByTagName("sub-class");
subClasses.add(
nlSubClasses.getLength() > 0 ?
((Element) nlSubClasses.item(0)).getAttribute("sub-class") :
null
);
}
关于java - 使用 Java 从 XML 中提取必需和可选的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41210268/