Java DOM解析器为何获胜';是否显示XML文件中的所有数据?
我正在学习如何用Java编写解析器,现在我正在尝试制作一个DOM XML解析器,但我的解析器并不显示XML文件中的所有数据。有什么问题吗?有人能帮我吗 下面是DOM解析器的类:Java DOM解析器为何获胜';是否显示XML文件中的所有数据?,java,xml,parsing,dom,domparser,Java,Xml,Parsing,Dom,Domparser,我正在学习如何用Java编写解析器,现在我正在尝试制作一个DOM XML解析器,但我的解析器并不显示XML文件中的所有数据。有什么问题吗?有人能帮我吗 下面是DOM解析器的类: public class DOMParser2 { private static Shoes getShoes(Node node) { Shoes shoes = new Shoes(); if(node.getNodeType() == Node.ELEMENT_NOD
public class DOMParser2 {
private static Shoes getShoes(Node node) {
Shoes shoes = new Shoes();
if(node.getNodeType() == Node.ELEMENT_NODE){
Element element = (Element) node;
shoes.setTitle(getTagValue("ss:title", element));
shoes.setBrand(Brand.fromValue(getTagValue("ss:brand", element)));
shoes.setCategory(Category.fromValue(getTagValue("ss:category", element)));
shoes.setSeason(Season.fromValue(getTagValue("ss:season", element)));
shoes.setPrice(Double.parseDouble(getTagValue("ss:price", element)));
}
return shoes;
}
private static String getTagValue(String tag, Element element){
NodeList nodeList = element.getElementsByTagName(tag).item(0).getChildNodes();
Node node = (Node) nodeList.item(0);
return node.getNodeValue();
}
public static void main(String[] args){
String filepath = "ShoesShop.xml";
File xmlFile = new File(filepath);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try {
builder = factory.newDocumentBuilder();
Document document = builder.parse(xmlFile);
document.getDocumentElement().normalize();
System.out.print("Root element: " + document.getDocumentElement().getNodeName());
NodeList nodeList = document.getElementsByTagName("ss:ShoesShop");
List<Shoes> shoesList = new ArrayList<Shoes>();
for(int i = 0; i<nodeList.getLength(); i++){
shoesList.add(getShoes(nodeList.item(i)));
}
for (Shoes shoes:shoesList){
System.out.println();
System.out.println(shoes.toString());
}
} catch(Exception exc){
exc.printStackTrace();
}
}
}
公共类DOMParser2{
私有静态鞋getShoes(节点){
鞋=新鞋();
if(node.getNodeType()==node.ELEMENT\u node){
元素=(元素)节点;
setTitle(getTagValue(“ss:title”,元素));
shoes.setBrand(Brand.fromValue(getTagValue(“ss:Brand”,element)));
setCategory(Category.fromValue(getTagValue(“ss:Category”,element)));
鞋子。设置季节(季节。fromValue(getTagValue(“ss:Season”,元素));
setPrice(Double.parseDouble(getTagValue(“ss:price”,element));
}
退鞋;
}
私有静态字符串getTagValue(字符串标记,元素){
NodeList NodeList=element.getElementsByTagName(标记).item(0.getChildNodes();
Node=(Node)nodeList.item(0);
返回node.getNodeValue();
}
公共静态void main(字符串[]args){
字符串filepath=“shoessshop.xml”;
文件xmlFile=新文件(文件路径);
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
文档生成器;
试一试{
builder=factory.newDocumentBuilder();
Document=builder.parse(xmlFile);
document.getDocumentElement().normalize();
System.out.print(“根元素:+document.getDocumentElement().getNodeName());
NodeList NodeList=document.getElementsByTagName(“ss:ShoesShop”);
List shoesList=new ArrayList();
for(int i=0;i您的第一个println显示了答案。您的根元素未命名为ShoesShop
,并且它没有任何名为shoes
。VGR,谢谢,它很有帮助。但我无法显示完整列表。我如何更改它?文档。getElementsByTagName(“shoes”);
返回一个空列表。也许您应该尝试实际的标记名,“ss:shoes”
?我尝试了“ss:shoes”但没有帮助。当我尝试“ss:ShoesShop”时,它只返回XML文件中的第一个注释(实际上,它有5个注释)。当我在那里更改项值时,例如:NodeList NodeList=element.getElementsByTagName(标记)。项(1).getChildNodes();它显示第二个注释,当项目(2)时,它显示第三个注释等。我需要显示所有注释。编辑您的问题并显示您正在运行的实际代码。
<ss:ShoesShop xmlns:ss="http://www.example.org/ShoesShop"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/ShoesShop ShoesShop.xsd ">
<ss:shoes id="1" stock="true">
<ss:title>Baltrum</ss:title>
<ss:brand>Gucci</ss:brand>
<ss:category>Boots</ss:category>
<ss:season>fall</ss:season>
<ss:price>734.0</ss:price>
</ss:shoes>
<ss:shoes id="2" stock="true" mostWanted = "true">
<ss:title>Amalfi</ss:title>
<ss:brand>Dior</ss:brand>
<ss:category>Mules</ss:category>
<ss:season>winter</ss:season>
<ss:price>364.0</ss:price>
</ss:shoes>
</ss:ShoesShop>