我正在尝试解析如下结构的XML文件。我想要实现的是将其转换为在MySQL中使用的表格式。例如,在这种情况下,我有一个这样的表,其列格式包含以下示例行:
name | industry_permid | trbc_code | mnemonic
Juvenile Products & Accessories | 4294951612 | 5320501015 | NULL
Life & Health Insurance | 4294952862 | 55301030| LINS
我的XML文件:
<conceptSet>
<concept>
<conceptId qcode="B:1389" />
<type qcode="cptType:2" />
<sameAs qcode="P:4294951612" />
<name role="nameRole:main" xml:lang="en">Juvenile Products & Accessories</name>
<broader qcode="B:199" />
<rtr:stage current="stg:live" />
<sameAs qcode="TRBC-2012-Hierarchical-ID:5320501015" />
</concept>
<concept>
<conceptId qcode="B:139" />
<type qcode="cptType:2" />
<sameAs qcode="P:4294952862" />
<name role="nameRole:mnemonic" xml:lang="en">LINS</name>
<name role="nameRole:main" xml:lang="en">Life & Health Insurance</name>
<broader qcode="B:136" />
<rtr:stage current="stg:live" />
<sameAs qcode="TRBC-2012-Hierarchical-ID:55301030" />
</concept>
</conceptSet>
问题是每当我尝试访问此XML树中的元素时,我只会获得带有名称标签的元素。我无法弄清楚如何访问没有任何标签的元素,如qcodes和东西。如果有任何帮助,我正在使用默认的Java XML解析器。
这是我到目前为止的代码,每次尝试获取属性时都会打印出null。
File mapping = new File("blah.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(mapping);
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getElementsByTagName("concept");
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.println(nodeList.item(i).getAttributes().getNamedItem("qcode"));
}
答案 0 :(得分:1)
在for
- 循环中,nodeList.item(i)
是concept
元素。因此,您尝试从qcode
元素中检索concept
元素,而不是它。
您可以遍历concept
元素的子节点以获取所需的元素,例如:
for (int i = 0; i < nodeList.getLength(); i++) {
NodeList children = nodeList.item(i).getChildNodes();
for (int j = 0; j < children.getLength(); j ++) {
System.out.println(children.item(i).getAttributes().getNamedItem("qcode"));
}
}
或者您可以使用XPath直接检索所需的节点,例如,请参阅this answer。