我有一个XML文件,我想解析(下面)。我在湄公河上用了一个例子来学习 - http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/comment-page-2/#comment-125087 但我得到一个错误“[致命错误] flight.xml:3:15:对于与元素类型”id“相关联的属性”{1}“,应该打开引号。”
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:android="www.google.com">
<passenger id=001>
<name>Tom Cruise</name>
</passenger>
<passenger id=002>
<name>Tom Hanks</name>
</passenger>
</root>
我更改了打印语句,但它不起作用。
System.out.println("Passenger id : " + getTagValue("passenger id", eElement));
System.out.println("Name : " + getTagValue("name", eElement));
如何在mykong中编辑代码以使其适用于我?
更新 - 我做了如下所述的更改。但是,现在我没有在输出中看到乘客的身份和姓名。我该如何解决这个问题?
此处的新XML文件 -
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:android="www.google.com">
<passenger id="001">
<name>Tom Cruise</name>
</passenger>
<passenger id="002">
<name>Tom Hanks</name>
</passenger>
</root>
答案 0 :(得分:2)
没有xml解析器会接受id = 001。它应该是id =“001”或id ='001'。这些是所谓的格式良好的 xml文档的最小要求,否则它不是xml文档
•XML documents must have a root element
•XML elements must have a closing tag
•XML tags are case sensitive
•XML elements must be properly nested
•XML attribute values must be quoted
此外,对代码进行此更改
public static void main(String argv[]) throws Exception {
File fXmlFile = new File("c://file.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("passenger");
System.out.println("-----------------------");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
System.out.println("Passenger id : " + e.getAttribute("id"));
System.out.println("Name : " + e.getElementsByTagName("name").item(0).getTextContent());
}
}
}
输出
Root element :root
-----------------------
Passenger id : 001
Name : Tom Cruise
Passenger id : 002
Name : Tom Hanks
答案 1 :(得分:1)
id属性应以双引号开头和结尾。
<passenger id="001">
也不要忘记关闭你的passanger标签(在你的例子中没有看到)。
答案 2 :(得分:0)
即使您只打开一次,您也会关闭名称标签两次。你应该想写这样的东西。
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:android="www.google.com">
<passenger id=001>
<name>Tom Cruise</name>
<passenger id=002>
<name>Tom Hanks</name>
</root>