Avatar billede smirnoff Nybegynder
09. januar 2003 - 21:33 Der er 8 kommentarer og
1 løsning

getElementById i java XML

Hej


Jeg sidder og kæmper en kamp for at bygge et xmldom object op fra bunden i java... det er lykkedes hen af vejen indtil jeg kom til at skulle hente et element via getELementById ... da røg jeg ind i problemet med attributter på elementer ... for at getElementById skal kunne fungere skal parseren kunne se at id'et på det på gældende element er et ID-element (iflg java API) ... hvordan definerer jeg det??

Via et DTD eller Schema ... og i så fald hvordan ??

jeg har et snip af koden her :

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder b = factory.newDocumentBuilder();
factory.setNamespaceAware(true);
factory.setValidating(true);

Document doc = b.newDocument();

Element elem = doc.createElement("root");
Element elem2 = doc.createElement("person");

Attr id = doc.createAttribute("id");
id.setValue("test");

elem2.setAttributeNode(id);
elem.appendChild(elem2);
doc.appendChild(elem);
System.out.println(doc.getElementById("test"));


.. den sidste linie returnerer null .. og det er ret irriterende
Avatar billede jakoba Nybegynder
09. januar 2003 - 21:43 #1
det er da javaSCRIPT det der. det har ingenting med sproget Java at gøre
Avatar billede smirnoff Nybegynder
09. januar 2003 - 21:51 #2
Der tager du fejl min ven ... for at overbevise dig har I her hele koden :

import javax.xml.parsers.*;
import org.w3c.dom.*;

class XML {
    public static void main(String[] args) {

        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

            DocumentBuilder b = factory.newDocumentBuilder();
            factory.setNamespaceAware(true);
            factory.setValidating(true);

            Document doc = b.newDocument();



            Element elem = doc.createElement("root");
            Element elem2 = doc.createElement("person");

            doc.appendChild(doctype);
            Attr id = doc.createAttribute("id");
            id.setValue("test");
            elem2.setAttributeNode(id);
            elem.appendChild(elem2);
            doc.appendChild(elem);

            System.out.println(doc.getElementById("test"));
        } catch(Exception e) {
            System.out.println("error: " + e.getMessage() + " " + e.getStackTrace() + " " + e.getCause());
        }

    }
}

...dette ER java ...
Avatar billede arne_v Ekspert
09. januar 2003 - 22:08 #3
Det er ganske rigtigt Java.

Men hvilken implementation bruger du ?

API doc siger:
  Implementations that do not know whether attributes are of type ID or not are expected to return null.

D.v.s. at det er ikke engang sikkert at din implementation understøtter det.
Avatar billede arne_v Ekspert
09. januar 2003 - 22:10 #4
Du kunne starte med prøve med "ID" i.s.f. "id".
Avatar billede smirnoff Nybegynder
09. januar 2003 - 22:15 #5
yep .. jeg har prøvet ID ... faktisk har du sikkert ret ... min implementation er bare en "default" i hht til ovenstående ... altså måske ikke engang DOM 2

jeg har efterfølgende selv undersøgt nærmere og vil forsøge mig med getDOMImplementation
Avatar billede arne_v Ekspert
09. januar 2003 - 22:19 #6
Lidt studeren har overbevist mig om at løsningen er at putte
følgende i DTD'en:

<!ATTLIST person id ID #REQUIRED Value CDATA "defaultValue">
Avatar billede arne_v Ekspert
09. januar 2003 - 22:25 #7
Efter mere studeren, så burde:

<!ATTLIST person id ID #REQUIRED CDATA>

være nok.
Avatar billede smirnoff Nybegynder
09. januar 2003 - 22:44 #8
Nu har jeg via DocumentBuilder oprettet et DOMImplementation object 

DOMImplementation dom = b.getDOMImplementation();
Document doc = dom.createDocument(null, "root", null);

..læg mærke til tredie argument til createDocument( .. ) - (null) det er der DTD'et skal ind som et DocumentType object ... nu er spørgsmålet - hvordan konverterer jeg et DTD til et sådant object ...
Avatar billede smirnoff Nybegynder
09. januar 2003 - 22:55 #9
Shit ... hvis jeg nu holdt søvnen ud af øjenene kunne jeg jo læse mig til at bruge metoden createDocumentType på DOMImplementation  objektet...

arne_v> tak for hjælpen ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester