2017-01-19 96 views
0

我試圖得到一個XML節點的內容,但是這是我得到的輸出異常:getTextContent XML節點上返回

Exception in thread "main" java.lang.AbstractMethodError: 
org.apache.xerces.dom.DeferredElementImpl.getTextContent()Ljava/lang/String; 
at cities2.main(cities2.java:74) 

在這裏你可以找到XML文件:

<?xml version="1.0" encoding="UTF-8" ?> 

<repertoire> 
<!-- John DOE --> 
<personne sexe="masculin"> 
    <nom>DOE</nom> 
    <prenom>John</prenom> 
    <telephones> 
     <telephone type="fixe">01 02 03 04 05</telephone> 
     <telephone type="portable">06 07 08 09 10</telephone> 
    </telephones> 
</personne> 

然後代碼塊:

import java.io.File; 

import java.io.IOException; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 

public class cities2 { 
public static void main(final String[] args) { 
    /* 
    * Etape 1 : récupération d'une instance de la classe "DocumentBuilderFactory" 
    */ 
    final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 

    try { 
     /* 
     * Etape 2 : création d'un parseur 
     */ 
     final DocumentBuilder builder = factory.newDocumentBuilder(); 

    /* 
    * Etape 3 : création d'un Document 
    */ 
    final Document document= builder.parse(new File("cities2.xml")); 



    /* 
    * Etape 4 : récupération de l'Element racine 
    */ 
    final Element racine = document.getDocumentElement(); 

    //Affichage de l'élément racine 
    System.out.println("\n*************RACINE************"); 
    System.out.println(racine.getNodeName()); 

    /* 
    * Etape 5 : récupération des personnes 
    */ 
    final NodeList racineNoeuds = racine.getChildNodes(); 
    final int nbRacineNoeuds = racineNoeuds.getLength(); 

    for (int i = 0; i<nbRacineNoeuds; i++) { 
     if(racineNoeuds.item(i).getNodeType() == Node.ELEMENT_NODE) { 
      final Element personne = (Element) racineNoeuds.item(i); 

     //Affichage d'une personne 
     System.out.println("\n*************PERSONNE************"); 
     System.out.println("sexe : " + personne.getAttribute("sexe")); 

      /* 
     * Etape 6 : récupération du nom et du prénom 
     */ 
     final Element nom = (Element) personne.getElementsByTagName("nom").item(0); 
     final Element prenom = (Element) personne.getElementsByTagName("prenom").item(0); 






     //Affichage du nom et du prénom 
     System.out.println("nom : " + nom.getTextContent()); 
     System.out.println("prénom : " + prenom.getTextContent()); 

     /* 
     * Etape 7 : récupération des numéros de téléphone 
     */ 
     final NodeList telephones = personne.getElementsByTagName("telephone"); 
     final int nbTelephonesElements = telephones.getLength(); 

     for(int j = 0; j<nbTelephonesElements; j++) { 
      final Element telephone = (Element) telephones.item(j); 

        //Affichage du téléphone 
        System.out.println(telephone.getAttribute("type") + " : " + telephone.getTextContent()); 
     } 
     }    
    }   
    } 
    catch (final ParserConfigurationException e) { 
     e.printStackTrace(); 
    } 
    catch (final SAXException e) { 
     e.printStackTrace(); 
    } 
    catch (final IOException e) { 
     e.printStackTrace(); 
    }  
} 

}

其實,問題的關注兩條線:

//Affichage du nom et du prénom 
    System.out.println("nom : " + nom.getTextContent()); 
    System.out.println("prénom : " + prenom.getTextContent()); 

XML文件讀取並解析,因爲我們可以在這個最後一個(我指的是System.out之前獲得所有輸出。 println(「nom:」+ nom.getTextContent()); ..)。 我使用JDK 8u121,所以它已更新, 如果您有任何想法,這將有所幫助。 謝謝

+0

XML文件在哪裏 –

+0

我很抱歉。請找到XML文件以及上面的代碼塊。謝謝 – Nina

+0

可能的重複http://stackoverflow.com/questions/14014989/java-lang-abstractmethoderror-org-apache-xerces-dom-elementimpl-gettextcontent – sideshowbarker

回答

0

堆棧跟蹤中存在org.apache.xerces.dom表示您沒有在JRE中使用DOM實現,而是使用Apache Xerces。如果您使用的舊版本的Xerces未實現DOM Level 3,則會出現此類異常。請移除Xerces(以便使用來自JRE的DOM實現)或將其升級到更新的版本。