-1

我尝试获取具有 NumVotes 最大值的“Value”字符串。之后我想做简单的断言(我知道怎么做),但我有问题如何获得这个“价值”。我对此没有任何想法和知识。

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 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"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

电流输出:

      Root element :poll
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
4

1 回答 1

0

您已经在迭代所有元素。通过使用变量跟踪迄今为止的最大值并将其与每个值进行比较,可以实现通过元素属性之一找到最大值。您的 for 循环稍作修改:

String targetValue = "";
int maxNumVotes = 0;
for (int i = 0; i < nodeList.getLength(); i++) {
    Element element = (Element) nodeList.item(i);
    int numVotes = Integer.parseInt(element.getAttribute("numvotes"));
    if (numVotes > maxNumVotes) {
        maxNumVotes = numVotes;
        targetValue = element.getAttribute("value");
    }
}
System.out.println("Value: " + targetValue + " NumVotes: " + maxNumVotes);

但是,如果您想按票数对元素进行排序,请将元素添加到列表中并使用比较器按票数或任何其他字段进行排序。

于 2019-07-16T21:09:12.387 回答