[英]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.