10
<person>
<firstname>
<lastname>
<salary>
</person>

これは私が解析しているXMLです。人の子要素のノード名を出力しようとすると、

文章

ファーストネーム

文章

苗字

文章

給料

生成されている#textを削除するにはどうすればよいですか?

更新-これが私のコードです

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();
}
4

1 に答える 1

6

setIgnoringElementContentWhitespaceを使用する場合にのみ機能setValidating(true)し、解析しているXMLファイルがDTDを参照している場合にのみ機能します。このDTDを使用して、空白のみのテキストノードが実際に無視できるかどうかを判断できます。ドキュメントにDTDがない場合、安全側でエラーが発生し、テキストノードを無視できないと想定されるため、子ノードをトラバースするときにテキストノードを無視する独自のコードを作成する必要があります。

于 2012-10-10T10:57:05.610 に答える