2012-12-09 64 views
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}“,预计打开引号。 “致命错误 - 无法使用Java代码解析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> 

我改变了打印语句,但它不起作用。

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> 
+0

如果XML解析器告诉你它不能解析你的文件,那么它几乎肯定是正确的:你不能使用XML解析器来解析非XML的东西。 –

回答

2

没有xml解析器会接受id = 001。它应该是id =“001”或id ='001'。这些是所谓的合式 XML文档miminum要求否则就不是一个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 
+0

我做了如下所述的更改。但是,现在我没有在输出中看到乘客ID和姓名。我如何解决这个问题? –

+0

好吧,现在就来看看吧 –

+0

@苹果研磨机 xml tags属性应该使用:elementNode.getAttribute(attribute_name) –

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> 
+0

哎呀!我的错。额外的结束标签应该是乘客而不是名字。顺便说一句,你的代码也会导致错误。 –

+0

哦,伙计,错过了那一个:-) – Stefan

1

id属性应该以双引号开头和结尾。

<passenger id="001"> 

也不要忘了关闭你的passanger标签(在你的例子中没有看到)。