operação getNodeName () em um nó XML retorna #text

9
<person>
<firstname>
<lastname>
<salary>
</person>

Este é o XML que estou analisando. Quando tento imprimir os nomes de nós dos elementos filho da pessoa, Eu recebo

texto

nome próprio

texto

sobrenome

texto

salário

Como eu elimino o #text sendo gerado?

Atualização - Aqui está o meu código

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();
}
    
por coder 10.10.2012 в 12:17
fonte

1 resposta

5

setIgnoringElementContentWhitespace só funciona se você usar setValidating(true) , e somente se o arquivo XML que você está analisando fizer referência a um DTD que o analisador pode usar para descobrir quais nós de texto somente em espaços brancos são realmente ignoráveis. Se o seu documento não tem um DTD, ele erra no lado seguro e assume que nenhum nó de texto pode ser ignorado, então você terá que escrever seu próprio código para ignorá-los enquanto você percorre os nós filhos.

    
por Ian Roberts 10.10.2012 / 12:57
fonte