使用Java从XML中提取必需和可选属性值
我有一项与java的XML解析(org.w3c.dom)相关的任务使用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"/>
<?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,它非常有用(而且很快)!我离得很近,但同时离得很远:)谢谢尼古拉斯,它非常有用(而且很快)!我离得很近,但同时离得很远:)