Mi spiego ancora meglio:
Io ho questo file DomDocumentCleanParser.java :
codice:
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import javax.xml.parsers.*;
import java.io.File;
import java.io.IOException;
/** DomDocumentCleanParser: versione di DomDocumentParser
con output dei soli elementi di interesse per il nostro esempio.
*/
public class DomDocumentCleanParser
{
public static org.w3c.dom.Node getChild(org.w3c.dom.Node parentNode,
int childIndex) {
org.w3c.dom.Node childNode = parentNode.getChildNodes().item(childIndex);
return childNode;
}
/* Array che mappa i tipi di elemento con l'indice int corrispondente
* alle specifiche per i node types di:
* Document Object Model (DOM) Level 2 Core Specification
* (http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113)
*/
static final String[] typeName = {
"none",
"Element",
"Attr",
"Text",
"CDATA",
"EntityRef",
"Entity",
"ProcInstr",
"Comment",
"Document",
"DocType",
"DocFragment",
"Notation"
};
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("Usage: java DomDocumentCleanParser filename");
System.exit(1);
}
DomDocumentCleanParser ddp = new DomDocumentCleanParser();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = dbf.newDocumentBuilder();
Document document = builder.parse( new File(args[0]) );
ddp.printNodeInfo(document);
} catch (SAXException sxe) {
Exception x = sxe;
if (sxe.getException() != null)
x = sxe.getException();
x.printStackTrace();
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
} // main
private void printNodeInfo(Node currentNode) {
short sNodeType = currentNode.getNodeType();
//Se è di tipo Element ricavo le informazioni e le stampo
if (sNodeType == Node.ELEMENT_NODE) {
String sNodeName = currentNode.getNodeName();
String sNodeValue = searchTextInElement(currentNode);
NamedNodeMap nnmAttributes = currentNode.getAttributes();
System.out.println("Elemento: " + sNodeName);
System.out.println("Attributi: " + printAttributes(nnmAttributes));
if(sNodeValue!=null){
if (!sNodeValue.trim().equalsIgnoreCase("")) {
System.out.println("Contenuto: " + sNodeValue);
}
}
System.out.print("\n");
}
int iChildNumber = currentNode.getChildNodes().getLength();
//Se non si tratta di una foglia continua l'esplorazione ricorsivamente
if (currentNode.hasChildNodes()) {
NodeList nlChilds = currentNode.getChildNodes();
for (int iChild = 0; iChild < iChildNumber; iChild++) {
printNodeInfo(nlChilds.item(iChild));
}
}
}
private static String searchTextInElement(Node elementNode) {
String sText = "";
if (elementNode.hasChildNodes()) {
//Il child node di tipo testo è il primo (e unico nel nostro caso)
Node nTextChild = elementNode.getChildNodes().item(0);
sText = nTextChild.getNodeValue();
}
return sText;
}
private static String printAttributes(NamedNodeMap nnm) {
String sAttrList = new String();
if (nnm != null && nnm.getLength() > 0) {
for (int iAttr=0; iAttr < nnm.getLength(); iAttr++) {
sAttrList += nnm.item(iAttr).getNodeName();
sAttrList += "=";
sAttrList += nnm.item(iAttr).getNodeValue();
sAttrList += "; ";
}
return sAttrList;
}
else {
return "assenti";
}
}
}
Io al posto che stampare a video in questo progetto, vorrei stampare su file, c'è qualcuno che potrebbe aiutarmi implementando il codice per salvare da questo progetto, o comunque dandomi delle dritte nello specifico!
Grazie!