[Java] Attribut in XML File ändern [Gelöst]

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Dimi, 19. November 2009 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 19. November 2009
    Attribut in XML File ändern [Gelöst]

    Hey,

    was wäre die beste, einfachste, schnellste Lösung um in einer XML Datei den Wert eines Attributs bzw. mehrerer zu ändern?

    Hab schon was über XML Parser gelesen, wobei SAX nur parsen kann und DOM auch manipulieren kann.

    Wie soll ich DOM verwenden um das Attribut zu ändern und im selben File auch abzuspeichern?
    Hab bisher nur beispiele gefunden bei der dann ein neues XML File erstellt wird...

    Oder geht es vielleicht auch ganz anders, ohne Parser?
    Wenn ich im XML File Platzhalter für die Werte habe z.B. $MyValue$ und dann im Programm über eine Stringersetzfunktion den neuen Wert reinschreib, wäre das vielleicht besser und wie sieht es dort aus mit öffnen,ändern und speichern der Datei?

    Also falls jemand Beispiele für mich hat, wäre mir damit sehr geholfen! bw is klar!

    Falls noch jmd. der Anwendungsfall interessiert:
    In der XML Datei stehen Connection Daten zu einer Datenbank und im Programm gibt es die Auswahl, was für eine Datenbank verwendet wird, deswegen muss über das Programm die korrekten Connection Daten zur DB eingetragen werden.
     
  2. 19. November 2009
    AW: Attribut in XML File ändern

    hi,

    schaue dir das beispiel mal an.
    LINK

    sollte dir sicher helfen.

    nice day,
    harry
     
  3. 19. November 2009
    AW: Attribut in XML File ändern

    Nur damit ich das richtige verstehe.
    Du haste eine XML-Datei. In dieser Datei sind Platzhalter (wahrscheinlich für Attribute deines Objekts). Und du willst dann das XML so parsen dass die Platzhalter durch die Attribute deines Objekts ersetzt werden.
    Ist das so richtig oder hab ich etwas falsch verstanden?
     
  4. 20. November 2009
    AW: Attribut in XML File ändern

    Es sollen die Werte von Attributen geändert werden.
    Das mit den Platzhaltern war ne Idee dafür, wenn man keinen Parser verwendet. Da habe ich noch die Frage, ob man es vll. so machen sollte und der Parser nicht vielleicht zu viel Aufwand wäre.

    Danke harry für den Link das Bsp. hat mir schon etwas weiter geholfen, leider bekomm ich das prog noch nicht zum laufen, da im XML File ein DTD angegeben ist und er deswegen irgendwie ne Verbindung aufbauen will?!

    DocumentBuilder isValidating() hab ich abgefragt und es steht auf false. Brauch es auch nicht, aber wieso bringt er mir dann diese Exception:

    Code:
    java.net.ConnectException: Connection timed out: connect
    Edit:

    hab ne lösung dafür gefunden:

    Code:
    builder.setEntityResolver(new EntityResolver() {
     public InputSource resolveEntity(String publicId, String systemId) {
     return new InputSource(new StringReader(""));
     }
    });
    
     
  5. 20. November 2009
    AW: Attribut in XML File ändern

    aaaaaah... habe gerade beim ersten post den letzten teil mit dem anwendungsfall gelesen. theoretisch könntest du das auch über JNDI lösen. willst du trotzdem das ganze über xml lösen solltest du dir mal groovy anschauen. genauer gesagt die SimpleTemplateEngine. das dürfte genau das sein was du brauchst.

    wenn du noch fragen dazu hast frag ^^
     
  6. 23. November 2009
    AW: Attribut in XML File ändern

    also ich hab eine XML Datei und will ein paar Werte von Attributen darin ändern.

    da ich es jetzt nicht mit dem Parser hinbekommen hab, möchte ich es mit den Platzhaltern machen und diese dann einfach über java in der datei ändern.

    wie bekomm ich das nun aber wieder hin?
    Datei öffnen, Platzhalter ersetzen, Datei speichern und wieder schließen?
    Bräuchte da wieder ein Beispiel das so ähnlich ist, bzw. File IO allgemein enthält.
     
  7. 23. November 2009
    AW: Attribut in XML File ändern

    Hey,

    hab mich nochmal hingesetzt und eine andere Parsermöglichkeit gesucht und eine sehr schöne und einfache gefunden: http://www.jdom.org

    Mit dem klappt es nun super!
    Hier noch mein Codebeispiel, falls es mal jemand brauchen sollte:

    Code:
    import java.io.FileOutputStream;
    import java.io.StringReader;
    import java.util.Iterator;
    import java.util.List;
    
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.input.SAXBuilder;
    import org.jdom.output.XMLOutputter;
    import org.xml.sax.EntityResolver;
    import org.xml.sax.InputSource;
    
    
    public class DBStringChanger {
    
     public static void main(String[] args) {
     new DBStringChanger("C:/DBStringsFile.xml");
     }
    
     public DBStringChanger(String filePath){
     try {
     SAXBuilder builder = new SAXBuilder(false);
     builder.setEntityResolver(new EntityResolver() {
     public InputSource resolveEntity(String publicId, String systemId) {
     return new InputSource(new StringReader(""));
     }
     });
     Document doc = builder.build(filePath);
     Element root = doc.getRootElement();
     
     List elements = root.getChildren();
     Iterator elIt = elements.iterator();
     while(elIt.hasNext()){
     Element el = (Element) elIt.next();
     if(el.getAttributeValue("id").equals("dataSource")){
     List properties = el.getChildren();
     Iterator propIt = properties.iterator();
     while(propIt.hasNext()){
     Element property = (Element) propIt.next();
     String pName = property.getAttributeValue("name");
     if(pName.equals("driverClassName"))
     property.setAttribute("value", "my.test.driver.class");
     if(pName.equals("url"))
     property.setAttribute("value", "my:test:driver://localhost:1337");
     if(pName.equals("username"))
     property.setAttribute("value", "testuser");
     if(pName.equals("password"))
     property.setAttribute("value", "testpassword");
     }
     }
     }
     
     XMLOutputter out = new XMLOutputter();
     out.output( doc, new FileOutputStream(filePath) );
    
     } catch (Exception e) {
     e.printStackTrace();
     }
     
     }
    }
    
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.