12. maj 2003 - 19:25
Der er
13 kommentarer og 1 løsning
Hurtig og færdigt eksempel på at hente bestemt værdi i XML
Nedenstående er et eksempel på det jeg ønsker, bare skrevet i C# og ikke i Java... public string GetRessourceFromKey(string Key) { string Value = null; XmlDocument XDoc = new XmlDocument(); XDoc.Load("E:\\Projects\\Meta\\META-1-02\\FrameWork\\resources.xml"); XPathNavigator XpNav = XDoc.CreateNavigator(); XPathExpression XpExp = XpNav.Compile("descendant::variable[key='"+ Key +"']"); XPathNodeIterator XpItr = XpNav.Select(XpExp); if(XpItr.MoveNext()) { XpItr.Current.MoveToFirstChild(); XpItr.Current.MoveToNext(); Value = XpItr.Current.Value; } return Value; } Mit XML doc indeholder den her slags elementer: ... <variable> <key>VersionMajor</key> <value>01</value> </variable> ... ------------------------------ / DP
Annonceindlæg fra SoftwareOne
Prøv og se på det her: 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.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class DomTest { 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()); } } catch (FactoryConfigurationError e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; } }
readXML viser hvordan du åbner en XML fil og kan løbe det igennem og finde værdier (standard DOM).
Det er ikke brugen at en XML reader jeg er interesseret i. Jeg er interesseret i at bruge XQL evt. sammen med en Xpath navigator som jeg ved der er mange firmaer der tilbyder, jeg har bare ikke kunne finde en stump kode der var til at tage ned af hylden... btw. arne_v - dit svar er også at finde under et andet spørgsmål herinde. / DP
Hvis du skal bruge XPath skal du have fat i Xalan.
arne_V >> har du et link til et færdigt eksempel på brug af Xalan ? / DP
Det er mig der har lavet den kode, så der er vel ikke noget odiøst i at jeg genbruger det. Og det fremgik ike helt klart af dit spørgsmåm om du bare skulle have læset den XML eller du skulle bruge XPath. Men det er da så afklaret nu.
Jeg kender ikke noget link til Xalan XPath kode. Men jeg kunne jo evt. lave et selv.
jeg synes det er meget svært at få overblik over Java og Xpath... / DP
Så har du vist ikke brug for et eksempel fra mig.
05. juni 2003 - 13:16
#14
det var et færdigt eksemepl du kom med, arne... det var ikke hvad jeg ledte efter og jeg har løst problemet på en anden måde med property sheets. men her er der point... tak for hjælpen. / DP / Peter
Kurser inden for grundlæggende programmering