java - 从 XML 文件中获取标签和值

标签 java xml xml-parsing

我有一个 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/

相关文章:

Python 将 "Convert"YAML 转换成 XML

C++ 解析二进制 plist

java - 内联 View 定义 Couch Db Ektorp

java - 如何从java程序启动activiti工作流程

java - Android - 二进制 XML 文件行 #19 : Error inflating class fragment

javascript - 使用脚本标记检测 Internet Explorer 上的 xml 加载失败

python - 解析 XML 文件以根据子元素检索父元素

java - 将 xml 属性解析为 ant-build.xml 文件

Java Spring 错误 : Could not get JDBC Connection

java - 如果我更改传递给 Arrays.asList(array) 的数组,列表值会更改