2016-06-15 11 views
0

の#text私は、XML documentにXML Stringを変換しようとしています:それはnodeName#text instaedを印刷する理由のJava - XML出力に文字列を解析 -

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder; 
    try { 
     builder = factory.newDocumentBuilder(); 
     Document document = builder.parse(new InputSource(new StringReader(xmlString))); 
     NodeList firstEle = document.getElementsByTagName("eMail"); 
     for(int i = 0; i < firstEle.getLength();i++){ 
      Node node = firstEle.item(i); //email 
      System.out.println("\ncurrent element : " + node.getNodeName()); //print email 
      NodeList allEmailChilds = node.getChildNodes(); 
      System.out.print("num of child nodes : " + allEmailChilds.getLength());//print 47 
      for(int j = 0 ; j<allEmailChilds.getLength(); j++){ 
       Node inMail = allEmailChilds.item(j);  
       System.out.print("\n"); 
       System.out.print("email element - " + inMail.getNodeName()); //prints #text 

       System.out.print("email value - " + inMail.getTextContent()); //prints empty line 
      } 
     } 

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

Somoneのは知っていますか?

if(inMail.getNodeType() == Node.ELEMENT_NODE){ 
     System.out.print("ele node"); // never prints 
    } 

印刷されることは決してありません:ノードタイプを取得しようとしたときにも

<?xml version="1.0" encoding="UTF-8"?> 
<eMail> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
    //more elemnts..... 
</eMail> 

:私はどこかに答えを見つけることができなかった、ここに私のxmlです。コードの下に

+0

'#text'は、純粋なテキストのノード名で、開始タグと終了タグ(" Tove ")の間にあります。開始タグと終了タグの間に複数の#textを持つことができることを覚えておいてください( "To")。 'node'はタグであるので' org.w3c.Element'にキャストできたことに注意してください。 –

+0

OK、ありがとう、私は要素のオブジェクトが問題だと思います。 –

答えて

2

ご覧ください。

import java.io.StringReader; 

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

import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 

public class Test 
{ 

    public static void main(String[] args) 
    { 

     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder; 
     try 
     { 
      builder = factory.newDocumentBuilder(); 
      Document document = builder.parse(new InputSource(new StringReader(
        "<eMail><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></eMail> "))); 
      NodeList firstEle = document.getElementsByTagName("eMail"); 
      for (int i = 0; i < firstEle.getLength(); i++) 
      { 
       Node node = firstEle.item(i); // email 
       System.out.println("\ncurrent element : " + node.getNodeName()); // print email 
       NodeList allEmailChilds = node.getChildNodes(); 
       System.out.print("num of child nodes : " + allEmailChilds.getLength());// print 47 
       for (int j = 0; j < allEmailChilds.getLength(); j++) 
       { 
        Node inMail = allEmailChilds.item(j); 
        System.out.print("email element - " + inMail.getNodeName()); // prints #text 

        System.out.print("email value - " + inMail.getTextContent()); // prints empty line 
       } 
      } 

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

    } 

} 

OUTPUT:

現在の要素:子ノードの電子メールNUM:4email要素 - 値toemail - Toveemail要素 - fromemail値 - Janiemail要素 - ヘッドラインの値 - Reminderemailの要素 - ボディーメイルの値 - Do not 今週末私を忘れる!

+0

それはうまくいく、私は同じを試みた。 –

+0

素晴らしい作品です、ありがとう! –