java - 如何使用 Java DOM 解析器读取 XML 字符串?民意调查、结果

标签 java xml jdom domparser readxml

我尝试从此 API 解析数据 XML 字符串 https://www.boardgamegeek.com/xmlapi/boardgame/13/catan 2天没有成功。我想获得所有语言依赖项的名称和值。

通过单词 poll 和 results 来理解这个 XML 是很麻烦的。 我分享一些我的代码...

import java.io.StringReader;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;

public class DomParserDemo {

    public static void main(String[] args) {

        try {

            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();
            InputSource is = new InputSource(new StringReader("<poll name=\"language_dependence\" title=\"Language Dependence\" totalvotes=\"170\"><results><result level=\"1\" value=\"No necessary in-game text\" numvotes=\"168\"/><result level=\"2\" value=\"Some necessary text - easily memorized or small crib sheet\" numvotes=\"0\"/><result level=\"3\" value=\"Moderate in-game text - needs crib sheet or paste ups\" numvotes=\"0\"/><result level=\"4\" value=\"Extensive use of text - massive conversion needed to be playable\" numvotes=\"0\"/><result level=\"5\" value=\"Unplayable in another language\" numvotes=\"2\"/></results></poll>"));
            Document doc = dbBuilder.parse(is);

            doc.getDocumentElement().normalize();
            System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
            NodeList nList = doc.getElementsByTagName("language_dependence");
            System.out.println("----------------------------");

            for (int temp = 0; temp < nList.getLength(); temp++) {
                Node nNode = nList.item(temp);
                System.out.println("\nCurrent Element :" + nNode.getNodeName());

                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;
                    System.out.println("language dependence : "
                            + eElement.getAttribute("level"));
                    System.out.println("value: "
                            + eElement
                            .getElementsByTagName("value")
                            .item(0)
                            .getTextContent());
                    System.out.println("numvotes: "
                            + eElement
                            .getElementsByTagName("numvotes")
                            .item(0)
                            .getTextContent());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
} 

我只有这样的输出:

Root element :poll
----------------------------

Process finished with exit code 0

最佳答案

试试这个,

NodeList nodeList = doc.getElementsByTagName("result");

    for (int i = 0; i < nodeList.getLength(); i++) {
        Element element = (Element) nodeList.item(i);
        System.out.println("Level = "+element.getAttribute("level")+", "+
                           "Value = "+element.getAttribute("value")+", "+
                           "NumVotes = "+element.getAttribute("numvotes"));
    }

输出,

Level = 1, Value = No necessary in-game text, NumVotes = 168
Level = 2, Value = Some necessary text - easily memorized or small crib sheet, NumVotes = 0
Level = 3, Value = Moderate in-game text - needs crib sheet or paste ups, NumVotes = 0
Level = 4, Value = Extensive use of text - massive conversion needed to be playable, NumVotes = 0
Level = 5, Value = Unplayable in another language, NumVotes = 2

关于java - 如何使用 Java DOM 解析器读取 XML 字符串?民意调查、结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57052196/

相关文章:

c# - 使用数据集的 xml 到 TreeView

java - 在Android上使用JDom2编写XML文件

java - 为什么XPATH无法访问该标签的值? ( java 语)

java - 如何在 JSON 响应中仅获取实体 ID 而不是整个实体

java - 如何访问事件监听器类中的变量?

java - 如何检查字符串是否仅包含 ASCII?

java - 多模块项目,gradle 和 bintray

java - "Hello world"android项目,直接来自书籍,有时会产生ActivityNotFoundException

sql-server - FOR XML PATH 导致 SSMS 被截断为 2034 个字符

java - 如何使用 Java 使用现有的 dtd 生成数据示例的 xml 文件