XML File mit SunAPI in Objects lesen

Romsl

Erfahrenes Mitglied
Hi,

ich muss ein XML file in objecte lesen und zwar ausdrücklich nur mit SunAPI. Mein Problem ist, dass er diese der Reihe nach abarbeitet. Ich möchte aber am ende 2 Objecte rule haben die in einer liste validation-rules stecken.

Code:
/*
 		 * Document builder factory
 		 */
 		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 
 		/*
 		 * Document builder
 		 */
 		DocumentBuilder docBuilder = factory.newDocumentBuilder();
 
 		/*
 		 * Parse XML File and build document
 		 */
 		Document doc = docBuilder.parse(this.getClass().getResource("validation_rules.xml").toString());

Code:
<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE validation-rules SYSTEM "validation_rules_dtd.dtd">
 
 <validation-rules>
 
 	<rule beanCommand="LoginCommand">
 
 			<field>
 			    <property>firstname</property>
 			    <validator>required</validator>
 				<message>
 				    <code>firstname.required</code>
 				    <default>Vorname fehlt</default>
 				</message>
 			</field>
 
 			<field>
 			    <property>lastname</property>
 			    <validator>required</validator>
 			</field>
 
 			<field>
 				<property>age</property>
 			    <validator>int</validator>
 			</field>
 
 	</rule>
 
 	<rule beanCommand="EmailCommand">
 
 		<field>
 			<property>email</property>
 			<validator>EmailValidator</validator>
 			<message>
 			    <code>email.missing</code>
 			    <default>Email fehlt</default>
 			</message>
 		</field>
 
 	</rule>
 
 </validation-rules>

Wie stell ich das an dass ich diese 2 objecte habe mit den jeweils dazugehörenden element objecten in diesen rule objecten.

es muss ein rule object mit 2 field objecten und 1 rule object mit 1 field object sein. die objecte füllen kann ich selber. Aber wie bekomme ich das hin diese so zu durchlaufen, dass ich sie richtig fülle.

Danke
 
Hallo!

Wenn du jJava 5 verwendest könntest beispielsweise folgendes machen:
Code:
 * created on 01.03.2005@22:19:30
 */
package de.tutorials;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
 * @author Administrator
 * 
 */
public class XMLExample {

    /**
     * @param args
     * @throws ParserConfigurationException
     * @throws IOException
     * @throws SAXException
     * @throws XPathExpressionException
     */
    public static void main(String[] args) throws Exception {
        new XMLExample().doit();
    }

    private void doit() throws Exception {
        Document doc = DocumentBuilderFactory.newInstance()
                .newDocumentBuilder().parse(
                        XMLExample.class.getResourceAsStream("data.xml"));

        XPath xPath = XPathFactory.newInstance().newXPath();
        NodeList list = (NodeList) xPath.evaluate("/validation-rules/rule",
                doc, XPathConstants.NODESET);

        for (int len = list.getLength(), i = 0; i < len; i++) {
            Node node = list.item(i);
            System.out.println(node.getAttributes().getNamedItem("beanCommand")
                    .getTextContent());
        }

    }
}

Normalerweise verwendet man für solche Probleme eine JAXB Implementierung wie etwa die Referenzimplementierung von sun -> http://java.sun.com/xml/jaxb/index.jsp welche beispielsweise im Web Services Developer Pack enthalten ist. Du könntest dir auch alternativ das XMLBeans Apache Projekt anschauen http://xmlbeans.apache.org/

Gruß Tom
 
Zurück