Hallo Leute,
ich habe ein Problem, dass ich trotz Suche bisher nicht lösen konnte. Ich hoffe mir kann hier jemand helfen
Also:
Ich habe eine vorgegebene xml-Datei, die ich gern nach Elementen durchsuchen möchte.
Auszug aus der xml-Datei (etwas anonymisiert
):
Um die Datei einzulesen und darin suchen zu können, habe ich JDOM benutzt.
Java-Code:
Wie man sehen kann, ist dem Namespace kein Prefix mitgegeben worden. Wenn ich händisch in die xml-Datei einen Prefix eingebe und im Java-Code diesen mit addNamespace(String nameSpace,Strng url) übergebe, dann funktioniert es, ebenso, wenn ich den Namespace einfach lösche. Leider kann ich beides nicht machen, da die xml-Datei fest vorgegeben ist.
Ich hoffe die Frage ist nicht zu banal, aber ich komm einfach nicht weiter und auch google und dieses Forum konnte mir nicht weiterhelfen ...
Hat vielleicht jemand einen heißen Tipp für mich?
Gruß,
Faruun
ich habe ein Problem, dass ich trotz Suche bisher nicht lösen konnte. Ich hoffe mir kann hier jemand helfen
Also:
Ich habe eine vorgegebene xml-Datei, die ich gern nach Elementen durchsuchen möchte.
Auszug aus der xml-Datei (etwas anonymisiert
Code:
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://www.tolle-url.de/configuration" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.tolle-url.de/configuration configuration.xsd">
<formstore xsi:type="filesystem-formstore" id="formstore_admin">
<root-path>${system:baseDir}/formstores/admin</root-path>
<unpack>true</unpack>
<versioning>false</versioning>
</formstore>
<formstore xsi:type="filesystem-formstore" id="formstore_unternehmen">
<root-path>${system:baseDir}/formstores/forms_unternehmen</root-path>
<unpack>true</unpack>
<versioning>false</versioning>
</formstore>
<formstore xsi:type="filesystem-formstore" id="formstore_verwaltung">
<root-path>${system:baseDir}/formstores/forms_verwaltung</root-path>
<unpack>true</unpack>
<versioning>false</versioning>
</formstore>
<formstore xsi:type="filesystem-formstore" id="formstore_buerger">
<root-path>${system:baseDir}/formstores/forms_buerger</root-path>
<unpack>true</unpack>
<versioning>false</versioning>
</formstore>
</server>
</configuration>
Um die Datei einzulesen und darin suchen zu können, habe ich JDOM benutzt.
Java-Code:
Code:
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;
public class ConfigurationParser {
/**
* @param args
* @throws IOException
* @throws JDOMException
*/
public static void parse(String datei) throws JDOMException, IOException {
SAXBuilder saxBuilder = new SAXBuilder();
Document doc = saxBuilder.build(new File(datei));
Element root = doc.getRootElement();
// Ausgaben zur Überprüfung
Namespace nameSpace = root.getNamespace();
System.out.println("Namespace: " + nameSpace); //Namespace wird korrekt ohne Prefix ausgegeben
System.out.println("Datei: " + doc);
// Zum Test, ob die xml-Datei komplett gelesen wird.
XMLOutputter outputter = new XMLOutputter();
outputter.output(doc, System.out);
XPath formstoreSuche = XPath.newInstance("//formstore");
formstoreSuche.addNamespace("","http://www.tolle-url.de/configuration"); //Hier scheint das Problem zu sein
System.out.println(formstoreSuche.getXPath());
List formstores = formstoreSuche.selectNodes(doc); //Hier erwarte ich die gefundenen Formstores
System.out.println("Liste \"formstore\": " + formstores); //Liste bleibt leer
for (Iterator iter = formstores.iterator(); iter.hasNext();) {
Element singleFormstore = (Element) iter.next();
List children = singleFormstore.getChildren();
List attr = singleFormstore.getAttributes();
System.out.println("Attributes: " + attr);
System.out.println("Children: " + children);
System.out.println("Formstore: " + singleFormstore);
}
}
public static void main(String[] args) throws JDOMException, IOException {
// TODO Auto-generated method stub
parse("test.xml");
}
}
Wie man sehen kann, ist dem Namespace kein Prefix mitgegeben worden. Wenn ich händisch in die xml-Datei einen Prefix eingebe und im Java-Code diesen mit addNamespace(String nameSpace,Strng url) übergebe, dann funktioniert es, ebenso, wenn ich den Namespace einfach lösche. Leider kann ich beides nicht machen, da die xml-Datei fest vorgegeben ist.
Ich hoffe die Frage ist nicht zu banal, aber ich komm einfach nicht weiter und auch google und dieses Forum konnte mir nicht weiterhelfen ...
Hat vielleicht jemand einen heißen Tipp für mich?
Gruß,
Faruun