0

我有一个要解析的 XML 文件(如下)。我在mykong上使用了一个例子来学习 - 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 中的代码以使其适合我?

更新 - 我进行了如下所述的更改。但是,现在我在输出中看不到乘客 ID 和姓名。我该如何解决?

新的 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>
4

3 回答 3

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
于 2012-12-09T13:30:58.720 回答
1

id 属性应该以双引号开始和结束。

<passenger id="001">

并且不要忘记关闭您的 passanger 标签(在您的示例中没有看到)。

于 2012-12-09T13:42:27.390 回答
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>
于 2012-12-09T13:28:36.263 回答