/Decoker, Lydie (Lydie)/:

I was looking the LSParser and LSParserFilter solution to get ride of those empty nodes. Tried to implement one but not able to remove those empty nodes.

The example I've attached here works for me.

--
Stanimir
package net.example;

import javax.xml.XMLConstants;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.bootstrap.DOMImplementationRegistry;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSParser;
import org.w3c.dom.ls.LSParserFilter;
import org.w3c.dom.traversal.NodeFilter;

public class SkipWhitespaceTest {

    static LSParserFilter skipWhitespaceFilter = new LSParserFilter() {
        
        public short acceptNode(Node n) {
            if (n.getNodeType() == Node.TEXT_NODE) {
                return (n.getNodeValue().trim().length() == 0)
                        ? FILTER_REJECT
                        : FILTER_ACCEPT;
            }
            return FILTER_ACCEPT;
        }
        
        public int getWhatToShow() {
            return NodeFilter.SHOW_ALL;
        }
        
        public short startElement(Element elem) {
            return FILTER_ACCEPT;
        }
        
    };

    public static void main(String[] args) throws Exception {
        String sourceURI = SkipWhitespaceTest.class
                .getResource("whitespace.xml").toExternalForm();
        
        DOMImplementationRegistry registry =
                DOMImplementationRegistry.newInstance();
        DOMImplementationLS domImpl = (DOMImplementationLS)
                registry.getDOMImplementation("LS 3.0");
        
        LSParser parser = domImpl
                .createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS,
                                XMLConstants.W3C_XML_SCHEMA_NS_URI);
        parser.setFilter(skipWhitespaceFilter);
        
        Document doc = parser.parseURI(sourceURI);
        System.out.println();
        System.out.println(doc.getNodeName());
        debugNode(doc.getFirstChild(), "  ");
    }

    static void debugNode(Node node, String indent) {
        if (node == null)
            return;
        
        System.out.println(indent + node.getNodeName());
        debugNode(node.getFirstChild(), indent + indent);
        debugNode(node.getNextSibling(), indent);
    }

}
<?xml version="1.0" encoding="US-ASCII" ?>
<Root>
    <FirstElement>Value</FirstElement>
</Root>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to