DOM Attribut als ID kennzeichnen

h00b

Mitglied
Hallo,

ich habe mit DOM ein XML File angelegt unter anderem hat ein Element ein Attribut Id welches eine UUID zugewisen bekommt...
Mein Problem ist, dass ich das Attribut mit der Methode: getElementById() lesen will, aber immer "null" zurück bekomme. Leider ist mein Attribut id wohl nicht vom TYPE="id". Meine Frage ist kann ich das Attribuit irgendwie als type="id" kennzeichnen ohne eine DTD zu nutzen? Da ich nämlich keine Ahnung habe wir man bei erzeugen eines XML-File auf eine entsprechende DTD verweist.

Wäre super wenn mir jemand helfen könnte.

Hier noch bisschen Code:
anlegen des attributs:
Java:
Attr attr = doc.createAttribute("id");
            String randomUUID = UUID.randomUUID().toString();
            attr.setValue(randomUUID);
            ConfigurationItem.setAttributeNode(attr);

Hier will ich es auslesen:
Java:
Element element = (Element)doc.getElementById(request.getParameter("CIid"));
            System.out.println(element);
das request.getParameter("CIid") einfach mal ausser acht lassen, hatte auch schon einen statischen wert drin stehen...

Grüße
Nico
 
Zuletzt bearbeitet von einem Moderator:
N

nillehammer

Gast
Bist Du sicher, dass Du JDOM benutzt?!? Bei dieser API gibt es nämlich überhaupt keine Methode getElementById().
 
S

SlaterB

Gast
Titel leicht geändert

Attr (Java Platform SE 7 )
boolean isId()

[..] The implementation could use several ways to determine if an attribute node is known to contain an identifier:

[..]
from the use of the methods Element.setIdAttribute(), Element.setIdAttributeNS(), or Element.setIdAttributeNode(), i.e. it is an user-determined ID attribute;

im Zweifel einfach selber alle Elemente, Attribute auslesen und in eigenen Methoden suchen usw.,
aber dann braucht man wohl DOM gar nicht mehr ;)
 
S

SlaterB

Gast
da stellt sich freilich die Frage, was du bisher überhaupt mit dem Attr machst? warum erstellst du das, wofür?
wenn man noch annehmen könnte, dass Attr ohne Element irgendeinen Sinn hat,
dann erwische ich dich spätestens bei der Frage:
welches Element willst du bei getElementById() haben? wieso sollte das mit dem Attr zu tun haben wenn diese Verknüpfung nirgendwo besteht? ;)

Attr createAttribute(String name)
throws DOMException

Creates an Attr of the given name. Note that the Attr instance can then be set on an Element using the setAttributeNode method.
wenn du Attr einem Element zuordnest, dann kannst du dort doch wohl auch setIdAttribute() aufrufen?

edit:
ist 'ConfigurationItem' dieses Element? Variablen IMMER klein schreiben!..
was spricht nun dagegen, dort auch setIdAttribute() aufzurufen?
 

h00b

Mitglied
Ich habe ein Element welches ein Attribut "id" hat. Im endeffekt will bei klicken eines Buttons den id-wert übergeben und entsprechend das element löschen.

Sollte so aussehen:
Java:
Element element = (Element)doc.getElementById("b713ed6f-e529-4a6b-9838-47997f9026ba");
            element.getParentNode().removeChild(element);

oben mit fester ID zum testen...

das Problem ist eben, dass er mir ne NUllPointerException auswirft...
Hab jetzt mal das hier gemacht, da ich denke das setzt das attribut "id" auf den typ id?!:
[Java]Element ConfigurationItem = doc.createElement ("ConfigurationItem");
rootElement.appendChild(ConfigurationItem);

Attr attr = doc.createAttribute("id");
String randomUUID = UUID.randomUUID().toString();
attr.setValue(randomUUID);
ConfigurationItem.setAttributeNode(attr);
ConfigurationItem.setIdAttribute ("id", true);[/code]

bekomme aber immernoch die exception

Grüße
Nico
 
Zuletzt bearbeitet:
S

SlaterB

Gast
ist das Element bei dir im Document geaddet? (edit: ok, steht im neuesten Code dabei, FALLS rootElement zu doc gehört..)
ansonsten hast du noch einen ziemlich komplizierten Id-Wert, geht einfaches "a", "b" usw?

und wie sehen die Abstände aus, wird das Document vor der getElementById()-Abfrage erst noch gespeichert und wieder geladen oder ähnlich schlimme Scherze?
gib doch da, wo es nicht gefunden wird, alle Childs als Liste/ Baum aus

hier gehts:
Java:
public class Test {
    public static void main(String[] args)   throws Exception  {
        DocumentBuilderFactory dBF = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = dBF.newDocumentBuilder();
        Document doc = builder.newDocument();

        Element e = doc.createElement("test1");
        doc.appendChild(e);

        System.out.println(doc.getElementById("idA"));

        Attr a = doc.createAttribute("id");
        a.setValue("idA");
        e.setAttributeNode(a);

        System.out.println(doc.getElementById("idA"));
        e.setIdAttribute("id", true); // besser noch: e.setIdAttributeNode(a, true);
        System.out.println(doc.getElementById("idA"));
    }

}
 
Zuletzt bearbeitet von einem Moderator:

h00b

Mitglied
Es funktionert einfach nicht bei mir ich weiss nicht ob ich auf dem schlauch stehe oder es einfach falsch ist
Also ich habe eben ein Servlet, dass das ganze xml erzeugt das sieht so aus
Java:
try {
            File file = new File ("D:\\CIs.xml");
   if (file.exists()){
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder;
            docBuilder = docFactory.newDocumentBuilder();
            Document doc;
            doc = docBuilder.parse(file);
            doc.getDocumentElement().normalize();
            Element rootElement = doc.getDocumentElement();
   
            Element ConfigurationItem = doc.createElement ("ConfigurationItem");
            rootElement.appendChild(ConfigurationItem);
            
            Attr attr = doc.createAttribute("id");
            String randomUUID = UUID.randomUUID().toString();
            attr.setValue(randomUUID);
            ConfigurationItem.setAttributeNode(attr);
            ConfigurationItem.setIdAttribute ("id", true);
            .......

Und jetzt habe ich ein andres das eben die Datei parst und dann das entsprechende Element mittels ID nehmen soll und ´zunächst mal ausgeben soll, das sieht so aus:
Java:
try {
            File file = new File ("D:\\CIs.xml");
            
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder;
            docBuilder = docFactory.newDocumentBuilder();
            Document doc;
            doc = docBuilder.parse(file);
            doc.getDocumentElement().normalize();
            
            Element element = (Element)doc.getElementById("59c3783b-6de3-4c41-ab09-2da6a453980f");
           System.out.println(element.getAttribute("Name"));;

Was is als ausgabe will ist im endeffekt den Wert des Attributs "Name" des entsprechenden ueber getElementByID addressiert Elements

aber das gibt mir ne Exception!

Ich weiss grad nicht weiter... siehst du den fehler??

Grüße
 
S

SlaterB

Gast
für den zweiten Code ist allein entscheidend, was in der XML-Datei steht,

die Befehle des ersten Codes spielen keinerlei Rolle außer wenn
a) das Document mit den neu erstellten Codes wieder als XML gespeichert wird (kein Code dazu zu sehen, nie von dir erwähnt)

b) das Speichern auch die Id-Eigenschaft usw. übernimmt, darf ich in meiner generellen Skepzis bezweifeln..,

XML ist so schön menschenlesbar, du kannst das doch als eigenen Text einlesen, jedes einzelne Zeichen an Information lesen, wissen, speichern, später neu interpretieren usw...,
dass man sich überhaupt mit BlackBoxen wie DOM abmüht..
 
N

nillehammer

Gast
Das Problem ist, dass die Information, die Du mit
[JAVA=19]
ConfigurationItem.setIdAttribute ("id", true);
[/code]
setzt, nur für das aktuell bearbeitete (im RAM vorhandene) DOM gilt. Beim Speichern geht diese Information verloren und folglich ist sie auch bei dem aus der Datei geladenen DOM nicht mehr vorhanden. Wenn Du getElementById nutzen willst, kommst Du nicht umhin, Dir eine DTD oder besser noch ein Schema zu definieren, das das id-Attribut als ID spezifiziert und beim Laden Deines Dokuments gegen dieses Schema zu validieren.
 

h00b

Mitglied
ok klar mach sinn, dass der das nicht speichert... Nicht drueber nachgedacht, im endeffekt heisst das fuer mich ich brauch doch n schema oder ne dtd...

Ja das mit dem abmühen ist so ne sache, ich weiss es einfach nicht besser...
 

h00b

Mitglied
Okay ein Schema zu machen ist kein Problem. Jetzt habe ich Code der erzeugt mir ein XML-File wenn keines da ist oder schreibt eben neue Einträge hinein wenn ein File schon existiert. Ausschnitte habt ihr ja oben gesehn.

Wenn ich jetzt bei erstellen des XML-FIles auf das Schema verweisen will bzw. gegen das Schema validieren will wie mache ich das? vielleicht ein kleiner/großer Hinweis?

Ansonsten Bedanke ich mich mal fuer die schnellen und hilfreichen Antworten!

Grüße
Nico
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
berserkerdq2 Wie lege ich ein Attribut comparator an? Java Basics - Anfänger-Themen 13
M Wie kann ich festlegen, dass ein Attribut maximal den Wert 0 erreicht, also nicht in den negativen Bereich fällt? Java Basics - Anfänger-Themen 4
U Wie ein Attribut von einer Klassenmethode in der Klasse speichern= Java Basics - Anfänger-Themen 2
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
C Setter-Methode mit final-Attribut Java Basics - Anfänger-Themen 9
T Inhalt aus TextField in Attribut einer Instanz schreiben Java Basics - Anfänger-Themen 5
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
D Attribut Telefonnummer - eigene Klasse oder String Java Basics - Anfänger-Themen 13
itsmejo Erste Schritte Auf Attribut einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 14
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
X Attribut initialisieren Java Basics - Anfänger-Themen 1
Z Attribut ändern ohne Kontrollstruktur Java Basics - Anfänger-Themen 2
S NIO lesbares und beschreibbares Attribut setzen Java Basics - Anfänger-Themen 1
X Auf Attribut einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 2
H Objekt als Attribut speichern Java Basics - Anfänger-Themen 11
N Fehler bei string Attribut! Java Basics - Anfänger-Themen 18
B Attribut vom Typ einer Klasse? Java Basics - Anfänger-Themen 3
D Klassen Warum wird das Attribut nicht ausgegeben? Java Basics - Anfänger-Themen 8
N Attribut einer anderen Klasse übertragen/verwenden Java Basics - Anfänger-Themen 5
Aprendiendo Zwei Fragen und ein geerbtes "protected"-Attribut Java Basics - Anfänger-Themen 2
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
N Methoden Attribut Abfrage eines anderen Objektes Java Basics - Anfänger-Themen 36
A Kann man ein Attribut aus einer anderen Klasse nutzen? Java Basics - Anfänger-Themen 3
A Private Attribut aus fremder Klasse lesen ? Java Basics - Anfänger-Themen 19
J Objekt mit Attribut "ansprechen" Java Basics - Anfänger-Themen 7
J Innerhalb Interfacemethode: Interface als Attribut Java Basics - Anfänger-Themen 2
V Attribut aus aus jedem ArrayListen index auf Bildschirm ausgeben Java Basics - Anfänger-Themen 9
W Attribut Werte eines Objekts mit gettern ausgeben Java Basics - Anfänger-Themen 5
C Probleme bei einem Stringvergleich - Attribut "value" unterscheidet sich Java Basics - Anfänger-Themen 9
B Klassenübergreifendes Objekt Attribut Java Basics - Anfänger-Themen 7
P Ausnahme, wenn Attribut nicht definiert Java Basics - Anfänger-Themen 4
V Auf Objektreferenz über Attribut zugreifen Java Basics - Anfänger-Themen 10
M Objekt mit Liste als Attribut seralisieren? Java Basics - Anfänger-Themen 5
S Ein Attribut/Instanz eines bestehendes Objektes mit SETTER Methode ändern Java Basics - Anfänger-Themen 3
R Variablen final String Variable als Attribut veränderbar? Java Basics - Anfänger-Themen 21
V Methoden Zeilen nach bestimmtem Attribut sortieren Java Basics - Anfänger-Themen 4
Blindxantos Datentypen Uhrzeit in einem Attribut speichern Java Basics - Anfänger-Themen 3
L Methoden In einer Klasse ein Attribut aus einer anderen Klasse setzen Java Basics - Anfänger-Themen 8
M JLabel attribut wert zuweisen Java Basics - Anfänger-Themen 2
P Enum Attribut in Konstruktoren Java Basics - Anfänger-Themen 10
C Liste mit Attribut Abstract vererben Java Basics - Anfänger-Themen 11
I Von einer Methode eines Objektes auf Attribut eines Objektes anderer Klasse zugreifen Java Basics - Anfänger-Themen 4
Ollek Collections ArrayList Object - Attribut von dem Object vergleichen Java Basics - Anfänger-Themen 7
M .toString(); // Ausgabe: Attribut von Vaterklasse Java Basics - Anfänger-Themen 12
K OOP Datenkapselung mittels private - length Attribut bei Array Java Basics - Anfänger-Themen 3
K Attribut als Referenz auf Objekt Java Basics - Anfänger-Themen 8
J Variable vs Attribut Java Basics - Anfänger-Themen 4
S Klasse als Attribut implementieren Java Basics - Anfänger-Themen 2
W Maven2 <packaging>jar</packaging> über Attribut auf WAR ändern Java Basics - Anfänger-Themen 5
X Attribut in n Objekten suchen Java Basics - Anfänger-Themen 8
G Objekte mit dem Attribut title mit Comparator sortieren Java Basics - Anfänger-Themen 5
P Objekte als Attribut: Referenz oder Kopie? Java Basics - Anfänger-Themen 3
D Zugriff auf attribut anderer Klasse privat/public? Java Basics - Anfänger-Themen 9
R Suchen nach Attribut Java Basics - Anfänger-Themen 5
S Attribut beim erzuegen eines Objektes automatisch erhöhen Java Basics - Anfänger-Themen 6
? Zugriff auf Attribut einer anderen Klasse Java Basics - Anfänger-Themen 2
M probleme mit array (als attribut einer klasse) Java Basics - Anfänger-Themen 2
W Attribut nur in Unterklasse ändern Java Basics - Anfänger-Themen 10
J Attribut casten Java Basics - Anfänger-Themen 3
I Mehrere Klasseninstanzen ueber Attribut sortieren? Java Basics - Anfänger-Themen 2
J Attribut vom Objekt einer eigenen Klasse setzen Java Basics - Anfänger-Themen 6
megachucky wie bekomm ich ein private attribut aus einer andren klasse? Java Basics - Anfänger-Themen 18
J Wie greife ich vonEvent-Handler auf Attribut einer Klasse zu Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben