我看了几个例子,但是所有这些例子似乎都使用比我想读的更简单的XML文件。
以下是我正在尝试阅读的布局示例:
<map>
<map_values></map_values>
<grid>
<grid_values></grid_values>
<square>
<values></values>
</square>
<square>
<values></values>
</square>
<square>
<values></values>
</square>
</grid>
<grid>
<grid_values></grid_values>
<square>
<values></values>
</square>
<square>
<values></values>
</square>
<square>
<values></values>
</square>
</grid>
</map>
目前我正在使用DOM尝试阅读此内容,但我不确定如何一次读取一个网格的方块部分。现在我正在使用以下内容:
NodeList squares = doc.getElementsByTagName("square");
但是它返回了两个网格中的所有方块。
我可以切换出DOM,我只需要建议切换到哪里以及在哪里找到一个好的教程。
答案 0 :(得分:2)
您可以使用JAXB。为这些地图创建模型对象非常容易。
参见例如 http://www.mkyong.com/java/jaxb-hello-world-example/ 关于如何使用这个库。
答案 1 :(得分:2)
我建议使用 JAXB(Java Architecture for XML Binding),因为它易于使用,也可用于验证XSD(如果需要)。
Java Beans&lt; ----&gt; XML 强>
以下是一个让您感受到它的示例:
@XmlRootElement(name = "book")
// If you want you can define the order in which the fields are written
// Optional
@XmlType(propOrder = { "author", "name", "publisher", "isbn" })
public class Book {
private String name;
private String author;
private String publisher;
private String isbn;
// If you like the variable name, e.g. "name", you can easily change this
// name for your XML-Output:
@XmlElement(name = "title")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
}
答案 2 :(得分:1)
你做这样的事情:
NodeList grids = doc.getElementsByTagName("grid");
然后迭代grids
,并为每个人调用getElementsByTagName("square")
?
这可以解决您的问题:
NodeList grids = doc.getElementsByTagName("grid");
for (int i=0; i < grids.getLength(); ++i) {
Element grid = (Element) grids.item(i);
NodeList squares = grid.getElementsByTagName("square");
...
}
答案 3 :(得分:1)
1)我个人的偏好是DOM。 SAX通常是我的第二选择(如果性能成为问题)。
2)有很多(很多,很多!)关于Java和XML的好教程,包括:
3)以下是关于如何使用Java和XPath获取您正在寻找的节点的一个很好的讨论:
答案 4 :(得分:0)
您可能希望首先找到网格:
NodeList grids = doc.getElementsByTagName("grid");
然后,要获取第一个square
节点的第一个grid
,请尝试:
Node gridNode = grids.item(0);
Node squareNode = gridNode.getChildNodes().item(2); //as it is second child node
*的 _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ____ 强>
但是如果您可能想要使用某些XML框架,那就更好了,例如XStream具有非常简单的API,可将XML
转换为JAVA
个对象。使用它,您可能希望在JAVA中转换两个XML文件并使用JAVA比较。
简单的步骤是:
MyXMLObj
映射Java属性中的XML属性。将您的XML转换为Java:
XStream xstream = new XStream();
//or
XStream xstream = new XStream(new DomDriver());
//or
//XStream xstream = new XStream(new StaxDriver());
MyXMLObj myXMLObj= (MyXMLObj)xstream.fromXML(xml1);
只需遍历您的java对象并获取所需的属性值:
myXMLObj.getGrids().get(0).getSquare();//returns square from first gird node