03. september 2003 - 14:49
Der er
6 kommentarer og 1 løsning
gennemløb af DOM-træ
hej der jeg har et xml dokument jeg skal have læst ind i nogle klasser xml: <?xml version="1.0"?> <!DOCTYPE note SYSTEM "skabelon.dtd"> <skabelon> <baggrund url="jens.jpg" /> <tekstelement> <titel> navn </titel> <beskrivelse> her intastes personens fulde navn </beskrivelse> <tekst SB="nej"> Jens Carlsen </tekst> <kordinater x="20" y="40" /> <sktifttype>arial </sktifttype> <farve> blue </farve> </tekstelement> <tekstelement> <titel> titel </titel> <beskrivelse> her skal du intaste din danske titel </beskrivelse> <tekst SB="nej"> over onanist </tekst> <kordinater x="20" y="60" /> <sktifttype> arial </sktifttype> <farve> blue </farve> </tekstelement> </skabelon> alt dette skal så lægges ind med en først der sætter baggrund derefter køre en for lykke over <tekstelement> og sætte ind med f.eks te.setTittel(???). jeg er kommet så langt at jeg har læst xmlen ind og fået den til at iterere over tekst elementerne, men jeg kan ikke få den til at købe igennem under træet (tittel beskrivelse...) java: try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new File(filename)); Element rootElement = doc.getDocumentElement(); NodeList nl =doc.getElementsByTagName("tekstelement"); System.out.println( nl.item(0).getNodeName()); kan jeg ikke komme vidre ned ved at skrive nl.item(0).getChildNodes() kan i ikke give mig et godt eksempel på navigering i strukturen??
Annonceindlæg tema
03. september 2003 - 14:53
#1
Jeg har et par eksempler liggende.
03. september 2003 - 14:53
#2
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; import org.apache.xml.serialize.XMLSerializer; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class DomTest2 { private final static String XML_FILE = "C:\\domtest.xml"; public static void main(String[] args) { ArrayList data1 = new ArrayList(); data1.add("a1"); data1.add("b2"); data1.add("c3"); data1.add("d4"); writeXml(data1, XML_FILE); ArrayList data2 = readXml(XML_FILE); System.out.println(data2); } private static void writeXml(ArrayList data, String filename) { try { PrintWriter pw = new PrintWriter(new FileOutputStream(filename)); pw.println("<?xml version='1.0' standalone='yes'?>"); pw.println("<arraylist>"); for (int i = 0; i < data.size(); i++) { pw.println( " <element>" + (String) data.get(i) + "</element>"); } pw.println("</arraylist>"); pw.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } private static ArrayList readXml(String filename) { ArrayList result = new ArrayList(); try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new File(filename)); NodeList elements = doc.getElementsByTagName("element"); for (int i = 0; i < elements.getLength(); i++) { Node element = elements.item(i); result.add(element.getFirstChild().getNodeValue()); } XMLSerializer ser = new XMLSerializer(System.out, null); ser.serialize(doc.getDocumentElement()); } catch (FactoryConfigurationError e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; } }
03. september 2003 - 14:54
#3
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.traversal.DocumentTraversal; import org.w3c.dom.traversal.NodeFilter; import org.w3c.dom.traversal.TreeWalker; import org.xml.sax.SAXException; public class Walker { private final static String XML_FILE = "C:\\walktest.xml"; public static void main(String[] args) { writeXml(XML_FILE); readXml(XML_FILE); } private static void writeXml(String filename) { try { PrintWriter pw = new PrintWriter(new FileOutputStream(filename)); pw.println("<?xml version='1.0' standalone='yes'?>"); pw.println("<list>"); pw.println("<!-- first element -->"); pw.println("<element>element 1</element>"); pw.println("<!-- second element -->"); pw.println("<element>element 2</element>"); pw.println("</list>"); pw.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } private static void readXml(String filename) { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new File(filename)); // oldfashioned way NodeList elements = doc.getElementsByTagName("element"); for (int i = 0; i < elements.getLength(); i++) { Node element = elements.item(i); System.out.println(element.getFirstChild().getNodeValue()); } System.out.println("----------"); // walk everything TreeWalker walk1 = ((DocumentTraversal)doc).createTreeWalker(doc.getDocumentElement(), NodeFilter.SHOW_ALL, null, false); Node n1; while((n1 = walk1.nextNode()) != null) { int type = n1.getNodeType(); String name = n1.getNodeName(); String value = n1.getNodeValue(); if (value != null) { value = value.replace('\n', ' '); } else { value = ""; } System.out.println(type + " " + name + " " + value); } System.out.println("----------"); // walk everything but comments TreeWalker walk2 = ((DocumentTraversal)doc).createTreeWalker(doc.getDocumentElement(), NodeFilter.SHOW_ALL & ~NodeFilter.SHOW_COMMENT, null, false); Node n2; while((n2 = walk2.nextNode()) != null) { int type = n2.getNodeType(); String name = n2.getNodeName(); String value = n2.getNodeValue(); if (value != null) { value = value.replace('\n', ' '); } else { value = ""; } System.out.println(type + " " + name + " " + value); } System.out.println("----------"); // walk all text that are child to element TreeWalker walk3 = ((DocumentTraversal)doc).createTreeWalker(doc.getDocumentElement(), NodeFilter.SHOW_TEXT, new Filter(), false); Node n3; while((n3 = walk3.nextNode()) != null) { int type = n3.getNodeType(); String name = n3.getNodeName(); String value = n3.getNodeValue(); if (value != null) { value = value.replace('\n', ' '); } else { value = ""; } System.out.println(type + " " + name + " " + value); } } catch (FactoryConfigurationError e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } class Filter implements NodeFilter { public short acceptNode(Node node) { if(node.getNodeType() == Node.TEXT_NODE && node.getParentNode().getNodeType() == Node.ELEMENT_NODE && node.getParentNode().getNodeName().equals("element")) { return NodeFilter.FILTER_ACCEPT; } else { return NodeFilter.FILTER_REJECT; } } }
03. september 2003 - 14:59
#4
Det viser ihvertfald hvordan du får løbet igennem et XML dokument. Du skal selvfølgelig lave noget kode specifikt til din XML.
03. september 2003 - 15:19
#5
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; import org.apache.xml.serialize.XMLSerializer; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class DomTest4 { private final static String XML_FILE = "C:\\test.xml"; public static void main(String[] args) { readXml(XML_FILE); } private static void readXml(String filename) { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new File(filename)); NodeList elements = doc.getElementsByTagName("tekstelement"); for (int i = 0; i < elements.getLength(); i++) { Node element = elements.item(i); NodeList subelements = element.getChildNodes(); for(int j = 0; j < subelements.getLength(); j++) { String tag = subelements.item(j).getNodeName(); if(tag.equals("titel")) { System.out.println("titel = " + subelements.item(j).getFirstChild().getNodeValue()); } // ... if(tag.equals("farve")) { System.out.println("farve = " + subelements.item(j).getFirstChild().getNodeValue()); } } } } catch (FactoryConfigurationError e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return; } }
03. september 2003 - 15:20
#6
Ovenstående kode kører på din XML fil.
03. september 2003 - 15:53
#7
tak kikker på det
Kurser inden for grundlæggende programmering