簡體   English   中英

將XML解析為Java對象,需要澄清

[英]Parsing XML to a Java object, clarification needed

將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)

請提供一個例子嗎?

有很多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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM