致命错误 - 无法使用Java代码解析XML文档

时间:2012-12-09 13:22:20

标签: java xml

我有一个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>

3 个答案:

答案 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>