使用Java读取XML
我已经看了几个例子,但它们似乎都使用了比我要读的更简单的XML文件 下面是我试图阅读的布局示例:使用Java读取XML,java,xml,Java,Xml,我已经看了几个例子,但它们似乎都使用了比我要读的更简单的XML文件 下面是我试图阅读的布局示例: <map> <map_values></map_values> <grid> <grid_values></grid_values> <square> <values></values> </sq
<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,我只需要一个关于切换到什么以及在哪里可以找到好教程的建议。您可以这样做吗:
nodelistgrids=doc.getElementsByTagName(“网格”)代码>
然后遍历网格
,对于每个网格,调用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");
...
}
nodelistgrids=doc.getElementsByTagName(“网格”);
对于(int i=0;i
你这样做怎么样:
nodelistgrids=doc.getElementsByTagName(“网格”)代码>
然后遍历网格
,对于每个网格,调用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");
...
}
nodelistgrids=doc.getElementsByTagName(“网格”);
对于(int i=0;i
您可以使用JAXB来实现这一点。为这些贴图创建模型对象非常容易
例如,见
关于如何使用这个库。您可以使用JAXB来实现这一点。为这些贴图创建模型对象非常容易
例如,见
关于如何使用这个库。1)我个人的偏好是DOM。SAX通常是我的第二选择(如果性能成为问题)
2) 关于Java和XML有很多(很多!)很好的教程,包括:
3) 下面是一个关于如何使用Java和XPath获取您要查找的节点的很好的讨论:
我个人的喜好是DOM。SAX通常是我的第二选择(如果性能成为问题)
2) 关于Java和XML有很多(很多!)很好的教程,包括:
3) 下面是一个关于如何使用Java和XPath获取您要查找的节点的很好的讨论:
您可能希望首先找到网格,如下所示:
NodeList grids = doc.getElementsByTagName("grid");
然后,要获取第一个网格
节点的第一个正方形
,请尝试:
Node gridNode = grids.item(0);
Node squareNode = gridNode.getChildNodes().item(2); //as it is second child node
*\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
但是,如果您可能想使用一些XML框架,例如使用非常简单的API将XML
转换为JAVA
对象,则更好。使用此选项,您可能希望在JAVA中转换这两个XML文件并使用JAVA比较
简单的步骤是:
定义简单Java对象(POJO),例如MyXMLObj
,以映射Java属性中的XML属性
将Java中的XML转换为:
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
您可能希望首先找到轴网,如下所示:
NodeList grids = doc.getElementsByTagName("grid");
然后,要获取第一个网格
节点的第一个正方形
,请尝试:
Node gridNode = grids.item(0);
Node squareNode = gridNode.getChildNodes().item(2); //as it is second child node
*\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
但是,如果您可能想使用一些XML框架,例如使用非常简单的API将XML
转换为JAVA
对象,则更好。使用此选项,您可能希望在JAVA中转换这两个XML文件并使用JAVA比较
简单的步骤是:
定义简单Java对象(POJO),例如MyXMLObj
,以映射Java属性中的XML属性
将Java中的XML转换为:
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
我建议使用JAXB(用于XML绑定的Java体系结构),因为它易于使用,也可以用于针对XSD进行验证(如果需要)
javabeansxml
下面是一个示例,让您体验一下:
资料来源:
我建议使用JAXB(用于XML绑定的Java体系结构),因为它易于使用,也可以用于针对XSD进行验证(如果需要)
javabeansxml
下面是一个示例,让您体验一下:
资料来源:
我可以在网格上迭代,但其中的每个项目本身都有一个节点,并且不能在节点上调用getElementsByTagName每个项目都有一个节点
实例。但是,元素
扩展了节点
。您可以将网格。项(i)
投射到元素
Element
有一个getElementsByTagName
方法。更新了我的答案,以演示如何进行。我可以在网格上迭代,但其中的每个项本身都有一个节点,并且不能在节点上调用getElementsByTagName每个项都有一个节点
实例。但是,元素
扩展了节点
。您可以将网格。项(i)
投射到元素
Element
有一个getElementsByTagName
方法。更新了我的答案,以演示如何更新。mkyong教程有我上面提到的相同问题。虽然对于更简单的XML来说很好,但它并没有显示如何克服我遇到的问题。这就是XPath的用途!请阅读Developerworks链接。不要放弃DOM。IMHOThe mkyong教程有我上面提到的相同问题。虽然对于更简单的XML来说很好,但它并没有显示如何克服我遇到的问题。这就是XPath的用途!请阅读Developerworks链接。不要放弃DOM。IMHO@Dr.Cyanide:我也用节点遍历更新了我的答案。@Dr.氰化物:我也用节点遍历更新了我的答案。我看了一下,我在做什么JAXB可能是最好的。我现在必须做另一个项目,我不确定我是否应该把这个问题标记为已回答,直到我能回到我的工作