2012-12-09 63 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標籤(在你的例子中沒有看到)。