我有一个 xml 配置文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Config>
<useProxy>true</useProxy>
<proxyReqPass>true</proxyReqPass>
<proxyHost>proxy.net.br</proxyHost>
<proxyUser>admin</proxyUser>
<proxyPass>12345</proxyPass>
</Config>
我有一个 Data() 对象列表,每个 Data() 包含 2 个字符串,即标签名称和标签值。所以我想在此列表中插入此 xml 文件的数据,如示例:
List<Data> data = new ArrayList<Data>();
File fXmlFile = new File("Config.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList elements = doc.getElementsByTagName("Config");
for (int i = 0; i < elements.getLength(); i++) {
Node nNode = elements.item(i);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
data.add(new Data(eElement.getTagName(), eElement.getTextContent()));
}
}
如果我打印列表:
for(int i = 0; i < list.size(); i++)
System.out.println("Node: " + list.get(i).getTagName() + " Value: " + list.get(i).getTextContent());
我想要的结果是:
> Node: useProxy Value: true
Node: proxyReqPass Value: true
Node: proxyHost Value: proxy.net.br
Node: proxyUser Value: admin
Node: proxyPass Value: 12345
但结果是:
> Node: Config Value:
false
false
我不知道我的错误在哪里,请有人帮助我
最佳答案
您正在迭代 <Config>
的搜索结果标签。您应该迭代搜索结果子项。
NodeList configTags = doc.getElementsByTagName("Config");
// assuming there will only be one `Config` node
NodeList elements = configTags.item(0).getChildNodes();
for (int i = 0; i < elements.getLength(); i++) {
// (everything else looks correct)...
}
当您查询getElementsByTagName()
时,返回一个 NodeList,在您的情况下,该 NodeList 应始终包含一个节点,即 <Config>
节点。要访问子节点( <useProxy>
等),您需要从节点列表中获取第一个节点并查询其子节点 getChildNodes()
.
关于java - 从 XML 文件中获取标签和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19706800/