2012-10-10 9 views
9
<person> 
<firstname> 
<lastname> 
<salary> 
</person> 

これは解析しているXMLです。私は人、 の子要素のノード名を印刷しようとすると私はの#textをなくすにはどうすればよいXMLノードのgetNodeName()オペレーションは#textを返します

テキスト

firstnameの

テキスト

テキスト

給与

を取得します生成されますか?

アップデート - あなたはsetValidating(true)を使用する場合はここで は私のコードは

try { 

    NodeList nl = null; 
    int l, i = 0; 
    File fXmlFile = new File("file.xml"); 
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    dbFactory.setValidating(false); 
    dbFactory.setIgnoringElementContentWhitespace(true); 
    dbFactory.setNamespaceAware(true); 
    dbFactory.setIgnoringComments(true); 

    dbFactory.setCoalescing(true); 


    InputStream in; 
    in = new FileInputStream(fXmlFile); 
    Document doc = dBuilder.parse(in); 
    doc.getDocumentElement().normalize(); 
    Node n = doc.getDocumentElement(); 

    System.out.println(dbFactory.isIgnoringElementContentWhitespace()); 
    System.out.println(n); 

    if (n != null && n.hasChildNodes()) { 
     nl = n.getChildNodes(); 

     for (i = 0; i < nl.getLength(); i++) { 
      System.out.println(nl.item(i).getNodeName()); 
     } 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+2

コードを表示する。 – swemon

+0

コードが提供されています。助けてください – coder

答えて

5

setIgnoringElementContentWhitespaceでのみ動作し、その後、XMLファイルのみ場合は、参照にパーサがどのwhitespace-をうまくするために使用できるDTDを解析されていますテキストノードだけが実際に無視されます。ドキュメントにDTDがない場合、安全面でエラーが発生し、無視できるテキストノードがないと仮定しているため、子ノードを通過する際に無視する独自のコードを記述する必要があります。

+0

ありがとうございました。どの方法が望ましいですか? DTDを書くか、空白を無視する方法を書いていますか? – coder

+2

空白のみのテキストノードを後で削除することは難しくありません(例:http://www.java.net/node/667186#comment-684625)。これにより、元のXMLファイルを修正してDTDを追加する必要がなくなります参照。 –

+0

これは素晴らしいです!どうもありがとう! – coder

関連する問題