Ciao a tutti ho il seguente problema nel gestire un documento xml con dom.
Se carico il mio documento, disabilitando la validazione con xsd, e cerco uno specifico nodo con xpath non ho problemi, e lo faccio così:
- caricamento xml:
codice:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
Document xml = factory.newDocumentBuilder().parse(new File("mio.xml"));
- ricerca di uno specifico nodo:
codice:
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("/lista-proprieta/dominio[@nome='asdfasdf']/proprieta-collection[1]");
Object result = expr.evaluate(proprietaXML, XPathConstants.NODESET);
NodeList nodes = (NodeList)result;
System.out.println("Nodi trovati: " + nodes.getLength());
In questo modo mi trova 1 nodo, perfetto.
Se invece introduco la validazione, cambio solo il mio processo di caricamento, ma non quello di ricerca del nodo:
- caricamento con validazione:
codice:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", new File("mio.xsd"));
DocumentBuilder builder = factory.newDocumentBuilder();
Document proprietaXML = builder.parse(new InputSource("mio.xml"));
Con questo caricamento quando cerco il nodo, non mi trova nulla.
Ovviamente se valildo l'xml con l'xsd è tutto corretto.
Io non ho proprio idea di cosa possa essere, sapreste darmi una mano?
Grazie a tutti.