Toon posts:

[XML-DTD] Lezen van een DTD in Java

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben op zoek naar een manier om een DTD uit te lezen met behulp van Java.
Het gaat hierbij om de elementen van bepaalde elementen op te halen en de attributen uit deze elementen te halen.

Ik heb het 1 en ander geprobeerd maar kom er niet uit.
Ik heb het bijvoorbeeld met een javax.swing.text.html.parser geprobeerd. Deze las wel de DTD in en gaf mij een gevraagd element terug. Maar wanneer ik hier attributen of andere elementen uit wil halen krijg ik alleen maar null pointer exceptions.

Kan iemand mij helpen hiermee?

Met vriendelijke groet,

Jelle

Verwijderd

met de beperkte gegevens die je geeft kan je hier eens kijken:\

http://java.sun.com/j2se/...text/html/parser/DTD.html

beetje code zodat we weten wat jij nou werkelijk doet kan handig zijn!

Verwijderd

Topicstarter
Okee iets meer uitleg :)

De DTD die ik gebruik:

-------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8" ?>

<!ELEMENT code ( #PCDATA ) >
<!ATTLIST code id NMTOKEN #REQUIRED >

<!ELEMENT naam ( #PCDATA ) >
<!ATTLIST naam id NMTOKEN #REQUIRED >

<!ELEMENT omschrijving ( #PCDATA ) >
<!ATTLIST omschrijving id NMTOKEN #REQUIRED >

<!ELEMENT merk ( #PCDATA ) >
<!ATTLIST merk id NMTOKEN #REQUIRED >

<!ELEMENT type ( #PCDATA ) >
<!ATTLIST type id NMTOKEN #REQUIRED >

<!ELEMENT waarde ( #PCDATA ) >
<!ATTLIST waarde id NMTOKEN #REQUIRED >

<!ELEMENT stroom ( #PCDATA ) >
<!ATTLIST stroom id NMTOKEN #REQUIRED
omschrijving (drukmeter|pressurepomp|contrib) #REQUIRED
type (stroom|spanning|druk) #REQUIRED >

<!ELEMENT SI_eenheid ( #PCDATA ) >
<!ATTLIST SI_eenheid id NMTOKEN #REQUIRED
eenheid NMTOKEN #REQUIRED
symbool NMTOKEN #REQUIRED
dimensie NMTOKEN #REQUIRED>

<!ELEMENT vermogen ( #PCDATA ) >
<!ATTLIST vermogen id NMTOKEN #REQUIRED >

<!ELEMENT spanning ( #PCDATA ) >
<!ATTLIST spanning id NMTOKEN #REQUIRED >

<!ELEMENT schakeling ( #PCDATA ) >
<!ATTLIST schakeling id NMTOKEN #REQUIRED >

<!ELEMENT doel ( #PCDATA ) >
<!ATTLIST doel id NMTOKEN #REQUIRED >

<!ELEMENT grondstof ( code, naam, omschrijving*, merk, type, waarde, stroom, vermogen,spanning, schakeling, doel, SI_eenheid*) >
<!ATTLIST grondstof type NMTOKEN #REQUIRED
id NMTOKEN #REQUIRED >


-------------------------------------------------------------------------------------------------------

Nu wil ik uit deze DTD gegevens gaan halen.
Ik wil bijvoorbeeld het element Grondstof ophalen en uit dit element wil ik halen dat deze onder zich de volgende elementen heeft: code, naam, omschrijving, merk , type, waarde, stroom, vermogen, spanning, schakeling, doel, SI_eenheid.

Ook wil ik van grondstof weten dat deze de attributen 'type' en 'id' bevat.

Met de JAVAX kon ik het dtd document inlezen. Ook kon ik bijvoorbeeld het element grondstof ophalen. Wanneer ik nu de functie getAttributes() aanriep krege ik niet de gewenste gegevens, maar inplaats daarvan een NullPointerException.

Nu is de vraag met welke parser ik het beste DTD's uit kan lezen.

Verwijderd

nou ja dan nog maar een keer.... het volgende staat in de docs staat het volgende:

A simple DTD-driven HTML parser. The parser reads an HTML file from an InputStream and calls various methods (which should be overridden in a subclass) when tags and data are encountered.

http://java.sun.com/j2se/...rser.html#getAttributes()

hier staat dus dat ie een HTML file leest!

dat wilt dus niet zeggen dat je een XML moet aan bieden!

dus andere parser misschien een idee!

Verwijderd

Topicstarter
Ja Dat snap ik dus nu inmiddels ook :)

Ik moet alleen weten WELKE parser ik dan wel moet gebruiken.

Dat is dus mijn vraag :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Wat wil je nu eigenlijk? Wil je een XML file lezen waar toevallig een DTD van bestaat (wat een bijna irrelevant detail is), of wil je een DTD file lezen en iets met de structuur die daar gedefinieerd wordt doen?

Het tweede komt zelden voor, het eerste kan je gewoon met de standaard XML parser in Java doen (javax.xml.parsers). Je kan andere libraries overwegen, die vaak slechts een schil zijn om de standaard SAX parser in Java. Zie daarvoor: [rml][ Java/XML] Welke technieken te gebruiken?[/rml]

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Als je echt een DTD wilt lezen zou je gebruik kunnen maken van DTDInst. Geniaal tooltje waarmee je een DTD naar een gebruiksvriendelijker en beter gestructureerd XML formaat kan omzetten. Ik gebruik het zelf ook om DTDs te kunnen verwerken.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

SAX is ook nog redelijk snel
Pagina: 1