java - 使用 Java 从 XML 中提取必需和可选的属性值

标签 java xml-parsing

我有一个与使用 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-classsub-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/

相关文章:

java.lang.OutOfMemory错误: Java heap space

java - 我怎样才能做一些像将文本设置到 ListView 中的 TextView 一样简单的事情

java写入现有的xml

java - 用于 Java 的小型、简约和快速的 XML 库?

java - 使用 Child 进行 XML 解析而不是值解析

java - :Illegal operation on empty result set

java - 在没有默认 java.policy 文件的情况下运行 Java 安全管理器

perl - 哪些 Perl 模块适合数据处理?

xml - LPX-00209 : PI names starting with XML are reserved when parsing soap response

java - 锁在java中是如何工作的