Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java从XML中提取必需和可选属性值_Java_Xml Parsing - Fatal编程技术网

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

使用Java从XML中提取必需和可选属性值,java,xml-parsing,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"/>

我有一项与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>

您可以首先获取子元素
主类
,这要感谢,然后为每个子元素获取名称为
超类
的第一个子元素,并获取名称为
子类
的第一个子元素(如果存在),否则使用
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
    );
}
//使用DOM解析器解析我的XML文档
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
Document doc=dBuilder.parse(源代码);
//获取所有子元素的主类`
NodeList nl=doc.getElementsByTagName(“主类”);
//初始化我的列表
int length=nl.getLength();
列表超类=新的ArrayList(长度);
列表子类=新的ArrayList(长度);
//对于找到的每个元素“primary class”
对于(int i=0;i
您可以首先获得子元素
主类
,这要感谢,然后对于每个子元素,您可以获得名为
超类
的第一个子元素,并获得名为
子类
的第一个子元素(如果存在),否则请使用
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
    );
}
//使用DOM解析器解析我的XML文档
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
Document doc=dBuilder.parse(源代码);
//获取所有子元素的主类`
NodeList nl=doc.getElementsByTagName(“主类”);
//初始化我的列表
int length=nl.getLength();
列表超类=新的ArrayList(长度);
列表子类=新的ArrayList(长度);
//对于找到的每个元素“primary class”
对于(int i=0;i
谢谢Nicolas,它非常有用(而且很快)!我离得很近,但同时离得很远:)谢谢尼古拉斯,它非常有用(而且很快)!我离得很近,但同时离得很远:)