2017-11-12 23 views
1

作成したxmlファイルからいくつかの属性を出力する必要があります。XMLファイルを読み込んでコンソールに出力する

これまでのところ、私はMKyoungに触発され、彼にいくつかの変更を加えました。しかし、私はxml属性を取得できません。私はその名前とスコアに名前を印刷したい。

public void readXMLFile(){ 
    try { 

    File fXmlFile = new File("highscore.xml"); 
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = dBuilder.parse(fXmlFile); 

    //optional, but recommended 
    //read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work 
    doc.getDocumentElement().normalize(); 

    System.out.println("Root element : " + doc.getDocumentElement().getNodeName()); 

    NodeList nList = doc.getElementsByTagName("Highscore"); 

    System.out.println("----------------------------"); 

    for (int temp = 0; temp < nList.getLength(); temp++) { 

     Node nNode = nList.item(temp); 

     System.out.println("\nCurrent Element : " + nNode.getNodeName()); 

     if (nNode.getNodeType() == Node.ELEMENT_NODE) { 

      Element eElement = (Element) nNode; 

      System.out.println("Name : " + eElement.getAttribute("score")); 


     } 
    } 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
    } 

そしてhighscore.xmlという名前の私のxmlファイルには、この含まれています:

<score name="Rasmus" score="10000"/> 

それを取得するための私のコードがある

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Highscore> 
    <score name="Rasmus" score="10000"/> 
    <score name="Søren" score="6000"/> 
    <score name="Niclas" score="5000"/> 
</Highscore> 
+1

あなたはノードの次のレベルを反復処理する必要があります。 [私の答え](https://stackoverflow.com/a/47248264/5832518)を確認してください – Raju

答えて

2

私はあなたのコードを2行追加して編集しました。以下を確認してください。基本的には、次のレベルのノードを反復処理する必要があります。

コード:

public void readXMLFile(){ 
    try { 

    File fXmlFile = new File("highscore.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("Highscore"); 
    Node child = nList.item(0); 
    NodeList nL = child.getChildNodes();  
    System.out.println("----------------------------"); 
    int i=1; 
    for (int temp = 0; temp < nL.getLength(); temp++) { 
     Node nNode = nL.item(temp); 
     if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
      Element eElement = (Element) nNode; 
      System.out.println(i+ ","+ eElement.getAttribute("name") +","+ eElement.getAttribute("score")); 
       i++; 
     } 
    } 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
    } 

出力:

Root element : Highscore 
---------------------------- 
1,Rasmus,10000 
2,Søren,6000 
3,Niclas,5000 
+0

あなたはまさにこのように! #textではなく、スコアだけを数えたいと思ったら?私が最高得点リストを作成しようとしているので、1. "名前" "スコア"と次は2. "名前" "スコア"?私がカウンターの温度を使用すると#textもカウントされます。 –

+0

@NiclasJohansen、更新された答えと出力を確認してください。私はカウンタとして 'i'を使いました。 – Raju

+0

非常にありがとう! –

0

あなたは、単純な-XMLのようなオープンソースするライブラリを使用することができます。

private Serializer serializer = new Persister(); 

// Reading 
(YOUROBJECT) serializer.read(YOUROBJECT.class, new File(path)); 
// Writing 
serializer.write(YOUROBJECT, file); 
+0

https://mvnrepository.com/artifact/org.simpleframework/simple-xml/2.7.1 –

+0

しかし、これは私にできるようになります属性スコアをコンソールに表示するには? –

+0

確かに...最終的にあなた自身の物を取り戻しています.... –

関連する問題