Avatar billede donpedrodelavega Nybegynder
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
Avatar billede arne_v Ekspert
12. maj 2003 - 19:28 #1
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;
  }
}
Avatar billede arne_v Ekspert
12. maj 2003 - 19:30 #2
readXML viser hvordan du åbner en XML fil og kan løbe det
igennem og finde værdier (standard DOM).
Avatar billede donpedrodelavega Nybegynder
12. maj 2003 - 19:36 #3
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
Avatar billede arne_v Ekspert
12. maj 2003 - 19:36 #4
Hvis du skal bruge XPath skal du have fat i Xalan.
Avatar billede donpedrodelavega Nybegynder
12. maj 2003 - 19:37 #5
Avatar billede donpedrodelavega Nybegynder
12. maj 2003 - 19:39 #6
arne_V >> har du et link til et færdigt eksempel på brug af Xalan ?

/ DP
Avatar billede donpedrodelavega Nybegynder
12. maj 2003 - 19:40 #7
Avatar billede arne_v Ekspert
12. maj 2003 - 19:41 #9
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.
Avatar billede arne_v Ekspert
12. maj 2003 - 19:42 #10
Jeg kender ikke noget link til Xalan XPath kode.

Men jeg kunne jo evt. lave et selv.
Avatar billede donpedrodelavega Nybegynder
12. maj 2003 - 19:46 #11
jeg synes det er meget svært at få overblik over Java og Xpath...

/ DP
Avatar billede donpedrodelavega Nybegynder
12. maj 2003 - 19:49 #12
Avatar billede arne_v Ekspert
12. maj 2003 - 19:53 #13
Så har du vist ikke brug for et eksempel fra mig.
Avatar billede donpedrodelavega Nybegynder
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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester