key aus xml lesen mittels jdom

Status
Nicht offen für weitere Antworten.

rtt

Bekanntes Mitglied
Hallo,
ich bin noch neu auf dem gebiet. Hab mal versucht eine xml mittels jdom ein zu lesen. Soweit so gut, nur stellt sich mir jetzt die Frage, wie ich an ein bestimmtes Element heran komme.

Meine xml sieht folgendermaßen aus:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    

    
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename"><value>messages</value></property>
    </bean>

    <bean id="externalFileDeleteListener" class="com.rtt.portal2.core.hibernate.ExternalFileDeleteListener">
    </bean>

    
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource"><ref bean="dataSource"/></property>
        <property name="mappingResources">
            <list>
                <value>com/rtt/portal2/core/entities/Screenshot.hbm.xml</value>
                <value>com/rtt/portal2/core/entities/Content.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
                <prop key="hibernate.cache.use_query_cache">false</prop>
                <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
                <prop key="hibernate.cache.query_cache_factory">org.hibernate.cache.StandardQueryCacheFactory</prop>
                
            </props>
        </property>
        
    </bean>
</bean>

Mich interresiert nun das prop-Element mit dem key "hibernate.dialect". Wie kann ich das auslesen, um später den Text des Elements zu ändern?

Habs bisher so probiert. Nur komme ich da irgenwie nicht weiter.
Code:
public void readApplicationContextXML(String path) {
		
		File xmlFile = new File(path);
		try {
			SAXBuilder builder = new SAXBuilder();
			Document doc = builder.build(xmlFile);
			DocType docType = doc.getDocType();
			
			Element beans = doc.getRootElement();
			Element propDialect = beans.getChild("bean");
			List prop = propDialect.getContent();
			
		} catch(IOException e) {
			System.out.println("Read error");
		} catch(JDOMException j) {
			System.out.println("jdom error" + j);
		}
	}

Kann mir da jemand weiter helfen?

Danke
Gruß Robin
 

Corpse

Mitglied
Schaut bis jetzt eh nicht schlecht aus. Jetzt iterierst noch über die Liste und suchst ein Element, das ein Attribut "key" mit dem gesuchten Wert besitzt.

Als Alternative kannst noch XPATH verwendent. Damit kannst direkt auf das gesuchte Element zugreifen. Dazu musst dir allerdings noch die Datein jaxen-core.jar, jaxen-jdom.jar und sax-path.jar in den Classpath einbinden.

Das ganze rennt dann so ab:
Code:
XPath xpath = XPath.newInstance("hier der xpath ausdruck");
Object o = xpath.selectSingleNode(XMLDokument);

Hoffe das hilft dir weiter.
 

rtt

Bekanntes Mitglied
Hallo,
vielen Dank für den Tip.
Hab das ganze nun mal mit XPath probiert.

Code:
public void readApplicationContextXML(String path) {
		
		File xmlFile = new File(path);
		
		try {		    
			SAXBuilder builder = new SAXBuilder(); 
		    Document document = builder.build(xmlFile);
		    
		    Element rootElement = document.getRootElement(); 
		    String xpathQuery = "//beans/bean/property[@name='hibernateProperties']/props/"; 
		    List<Element> list = XPath.selectNodes(rootElement, xpathQuery); 

			for (Element testElement : list) 
			{
			     // get the prop element 
				Element propElement = testElement.getChild("prop"); 
							
				List<Element> varParamList = XPath.selectNodes(propElement, "//prop[@key='hibernate.dialect']"); 
				for (Element varParamElement : varParamList) 
				{ 
					System.out.println("var-param:" + varParamElement.getText()); 
				}
			}
			
		} catch(IOException e) {
			System.out.println("Read error");
		} catch(Exception e) {
			System.out.println("Exception" + e);
		}
	}

Leider bekomme ich immer eine Exception:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/jaxen/BaseXPath
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at org.jdom.xpath.XPath.newInstance(XPath.java:126)
	at org.jdom.xpath.XPath.selectNodes(XPath.java:337)
	at com.rtt.configEditor.PortalConfigEditorApplicationContext.readApplicationContextXML(PortalConfigEditorApplicationContext.java:26)

Was habe ich falsch gemacht?

Oder mache ich das schon zu umständlich? Kann man direkt auf das gesuchte Element zugreifen, ohne sich eine Liste mit Elementen geben zu lassen?

Gruß Robin
 

rtt

Bekanntes Mitglied
Die Fehlermeldung war darauf zurück zu führen, dass ich jaxen-core.jar, jaxen-jdom.jar und saxpath.jar in den classpath mit aufnehmen muss.

Hab das ganze auch zum laufen bekommen und kann nun auf den gesuchten Text zugreifen.

Code:
public void readApplicationContextXML(String path) {
		
		File xmlFile = new File(path);
		
		try {			
		    SAXBuilder builder = new SAXBuilder();
		    Document document = builder.build(xmlFile);
		  	
		    Element rootElement = document.getRootElement();
		        
		    String query = ".//ns:prop[@key='hibernate.dialect']/text()";
		    Object test = XPath.selectSingleNode(rootElement, query);
		    		    
		    System.out.println(test.toString());
			
		} catch(IOException e) {
			System.out.println("Read error");
		} catch(Exception e) {
			System.out.println("Exception: " + e);
		}
	}

Nur finde ich, dass es ziemlich lange dauert (2-3 sekunden), bis er das xml gelesen hat.
Gibt es möglichkeiten, das zu beschleunigen?

Gruß Robin
 

Corpse

Mitglied
Na ja, Problem bei JDOM ist, dass das XML-Dokument komplett im Speicher gehalten wird um Veränderungen und einen flexibleren Zugriff zuzulassen. Falls du nur das Dokument einlesen willst, es allerdings nicht verändern willst, würd ich dir die Verwendung von SAX empfehlen. Das ist nicht so speicherintensiv wie die ganzen DOM Derivate, lässt allerdings auch keine Manipulationen am XML-Dokument zu.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Klassen mit generischen Attributen mit Jackson lesen XML & JSON 4
H XMLConfiguration(1.10)/getString : Wert "E" aus <version type="Auto">E</version>n lesen XML & JSON 15
C einfach XML lesen XML & JSON 4
JBoby Yaml File lesen und in Objekte umwandel (SnakeYAML / YamlBeans) XML & JSON 0
E Einzelne Tags der context.xml lesen XML & JSON 1
W Json von URL Lesen (mit Gson Library) XML & JSON 3
W Json von URL Lesen XML & JSON 2
G Jsoup Daten lesen XML & JSON 0
F KindElemente lesen und begrenzen XML & JSON 0
P Bestimmte XML-Inhalte in String lesen XML & JSON 2
B XML aus einer URL im Internet lesen (JDOM) XML & JSON 4
P Komfortabel XML Dokumente schreiben und lesen XML & JSON 6
Maxim6394 Lesen/Schreiben von XML Datei XML & JSON 9
D Aus lesen einer XML-Datei ( 1 root, 3 childs) XML & JSON 7
R XLM Datei lesen Ändern (kompliziertes Search and Replace) und Speichern XML & JSON 12
S XML lesen und schreiben XML & JSON 2
Q Atom/RSS-Feed lesen - per XSD zu Java-Code XML & JSON 4
K JAXB: Klassen mit Annotation Lesen/Schreiben XML XML & JSON 3
O PDF mit Pdfbox lesen XML & JSON 3
S XMLStreamReader, letzten eintrag eines xml lesen? XML & JSON 5
N MalformedByteSequenceException bei Lesen aus XML Datei XML & JSON 2
Mike90 Daten aus DB in ExcelTabelle lesen + bearbeiten + formatieren XML & JSON 2
Mike90 -xlsx Dateien in Java lesen XML & JSON 3
Fadi .classpath(XML) mit Java lesen XML & JSON 2
J Problem beim XML-Lesen XML & JSON 2
J Logdaten als XML speichern und lesen XML & JSON 2
J XML lesen schreiben XML & JSON 7
N jdom problem beim lesen von child elementen XML & JSON 5
N problem bei xml lesen mit jdom XML & JSON 2
T Xml lesen und in .txt zeilenweise schreiben XML & JSON 4
L Einfaches XML Lesen und Schreiben XML & JSON 4
C SAX Probleme beim lesen XML & JSON 4
O OpenDocument-Tabelle mit Java lesen und schreiben XML & JSON 3
F XML ( ca. 280 MB) JDom & SAXBuilder lesen = OutOfMemoryE XML & JSON 4
O XML lesen, wenn DTD in anderem Verzeichnis XML & JSON 2
R Daten aus xml lesen und in Strings speichern XML & JSON 4
R xml mit Jdom lesen und als Jtree anzeigen. XML & JSON 9
J Jdom Elemente lesen XML & JSON 5
thE_29 Vor dem ersten Posten bitte lesen! XML & JSON 0
R XML-Validierung mittels XSD unter Eclipse XML & JSON 2
sylo Knoten mittels selbstgebasteltem TreePath öffnen XML & JSON 2
P Große XML Datei mittels JDOM bearbeiten / einlesen XML & JSON 6
G Servlet mittels XSL in HTML konvertieren XML & JSON 5
G Serialisierung / Deserialisierung von XML mittels EMF XML & JSON 5
flashfactor Filtern mittels XPATH XML & JSON 4
P JDOM oder SAX XML & JSON 3
Hijo2006 Grundsätzliches zu JDOM 2.x XML & JSON 1
W Kindelemente mit JDOM eines bestimmten Attributes auslesen XML & JSON 6
S JDOM XML Datei darstellen Fehler! XML & JSON 2
S JDom XML ein Element hinzufügen. XML & JSON 1
C JDOM: Value ohne Unterelemente auslesen XML & JSON 1
Z XML Datei mit JDOM einlesen und verarbeiten XML & JSON 6
J JDOM XMLOutputter getPrettyFormat() XML & JSON 3
H JDOM setAttribute Reihenfolge XML & JSON 3
F Aus XML mit JDOM aus Elementattributen Werte rauslesen XML & JSON 4
R sax, stax, jdom, jaxb? List von Objekten speichern und laden XML & JSON 6
C xml validierung gegen xsd mit jdom: Fehlermeldung Cannot find the declaration of element ... XML & JSON 8
T Dom, Jdom, Sax XML & JSON 8
Helgon MalformedByteSequenceException und null JDOM Attribute XML & JSON 5
Helgon JDOM schreibt nicht XML & JSON 2
A XSl mit JDom auslesen XML & JSON 1
G xml, jdom "Entität wurde referenziert aber nicht deklariert." XML & JSON 4
A XSL und JDom XML & JSON 3
G jdom-Klassen in Eclipse importieren XML & JSON 2
S JDOM ohne XML Header erzeugen? XML & JSON 2
G JDOM - aus Children-Liste ein Child direkt ansprechen ohne XPath? XML & JSON 9
S JDOM nur Attribut Name XML & JSON 2
X JDom für SOAP Dateien geeignet? XML & JSON 3
T Xpath & JDOM Element Pfad ausgeben XML & JSON 2
M XML Parsen JDOM NullPointerEcxeption XML & JSON 7
S jdom hasChildren()? XML & JSON 1
T Frage zu getContent unter jdom XML & JSON 6
Z Tutorial für JDOM (XSD-Shema) XML & JSON 3
D jdom, xml, login-system XML & JSON 4
N JDOM: XML einlesen XML & JSON 4
O Parsen einer XML mit JDOM ohne Doctype Declaration XML & JSON 2
lordcarlos jdom zu iso-8859-15 zwingen XML & JSON 4
P jdom XML-Encoding auslesen XML & JSON 12
E JDOM - letzem child Attribut hinzufügen XML & JSON 4
H Schema-Validierung mit JDOM XML & JSON 2
lordcarlos JDOM und entfernen von children XML & JSON 4
E JDOM - Problem beim Zusammenfügen zweier Dateien XML & JSON 2
T jdom.jar als Relativer Pfad in Eclipse einbinden XML & JSON 4
sparrow JDom Element.getChild("Name") liefert null obwohl vorhanden XML & JSON 4
S XML, UTF-8, JDOM und Umlaute XML & JSON 3
E XML - JDOM - Bäume: was würdet ihr hier machen? XML & JSON 11
A JDOM: Wert schreiben bzw. ändern XML & JSON 6
T JDOM Bibiliothek XML & JSON 3
K JDOM vs. DOM, Schnittstellen XML & JSON 5
0x7F800000 jdom mit xml.transform inkompatibel, was soll ich nehmen? XML & JSON 2
T EXSD auslesen mit XPath und JDOM XML & JSON 8
A JDOM und Sonderzeichen < > XML & JSON 17
G Simples XML File einlesen mit JDom. Prefix not bound ? XML & JSON 2
S Ampersand im Jdom-Element XML & JSON 2
N jdom - xslt-Verweis in .xml einfügen XML & JSON 3
S Jdom+java webstart XML & JSON 4
K html -> cyberneko -> xml -> jdom . XML & JSON 3
I JDom Text ändern XML & JSON 4
C jdom.Element nicht vorhanden? XML & JSON 4
W JDOM element ändern funzt nich :( [problem gelöst] XML & JSON 3

Ähnliche Java Themen

Neue Themen


Oben