0

将此 XML 粘贴到对象中的最佳方法是什么?

<root>
    <data value=1>
        <cell a='1' b='0'/>
        <cell a='2' b='0'/>
        <cell a='3' b='0'/>
    </data>
    <data value=12>
        <cell a='2' b='0'/>
        <cell a='4' b='1'/>
        <cell a='3' b='0'/>
    </data>
</root>

我们可以假设

  • 每一个都data value将是独一无二的。
  • 分配给它的实际数值很重要,需要捕获
  • 分配给数据值的实际数字可能以不同的顺序出现,不一定是序列号数组。我们所知道的是,数字将是独一无二的

是否可以将其放入Map<Integer, List<Cell>>下,将单元格分组data value

理想情况下,方法签名如下所示 public static Map<Integer, List<Cell>> parse(String pathToFile)

你能提供一个例子吗?

4

1 回答 1

1

有很多 XML 解析的例子。最简单的 API(绝对不是最高效的)是 DOM 解析。这是一种方法:

public static Map<Integer, List<Cell>> parse(String pathToFile) {
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(pathToFile);
    Map<Integer, List<Cell>> result = new HashMap<>();
    NodeList dataNodes = doc.getElementsByTagName("data");
    int count = dataNodes.getLength();
    for (int i = 0; i < count; ++i) {
        Node node = dataNodes.item(i);
        if (node.getNodeType() == Node.ELEMENT_NODE) {
            Element element = (Element) node;
            int value = Integer.parseInt(element.getAttribute("value"));
            result.put(value, getCells(element);
        }
    }
    return result;
}

private static List<Cell> getCells(Element dataNode) {
    List<Cell> result = new ArrayList<>();
    NodeList dataNodes = dataNode.getElementsByTagName("cell");
    int count = dataNodes.getLength();
    for (int i = 0; i < count; ++i) {
        // similar to above code
    }
    return result;
}
于 2013-09-29T20:11:32.560 回答