[Java/dom4j] Document wordt niet goed opgebouwd.

Pagina: 1
Acties:

  • Standeman
  • Registratie: November 2000
  • Laatst online: 20:05

Standeman

Prutser 1e klasse

Topicstarter
Ik heb een simpel xml document dat ik wil opbouwen en dat doe ik als volgt:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
        DocumentFactory df = DocumentFactory.getInstance();
        _document = df.createDocument();
        Element rootElement = df.createElement(e_epp);
        _document.setRootElement(rootElement);


        rootElement.addNamespace("", xmlns);        
        rootElement.addAttribute(this.a_xmlns_xsi, xmlns_xsi);
        rootElement.addAttribute(this.a_xsi_schemaLocation, xsi_schemaLocation);
        
        Element command = df.createElement(e_command);
        rootElement.add(command);
             etc....


Echter dit geeft het volgende stuk document weer:

XML:
1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="http://www.eurid.eu/xml/epp/epp-1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.eurid.eu/xml/epp/epp-1.0 epp-1.0.xsd">
   <command xmlns="">
       etc....


Het probleem zit 'm in de <command xmlns="">. Ik begrijp niet helemaal waarom dit er in komt te staan en niet gewoon <command> zoals ik het wil.

Wanneer ik xmlns gewoon als attrubite aan het epp element probeer toe te voegen, dan wordt het gewoon genegeerd en is deze niet meer terug te vinden in het xml bericht.

Wat ik dus wil bereiken is:
XML:
1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="http://www.eurid.eu/xml/epp/epp-1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.eurid.eu/xml/epp/epp-1.0 epp-1.0.xsd">
   <command>
       etc....


Maar het wil me maar niet lukken. :/

[ Voor 9% gewijzigd door Standeman op 20-11-2005 16:32 ]

The ships hung in the sky in much the same way that bricks don’t.


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Ik ben niet thuis in dom4j, maar die eerste parameter in addNamespace ziet er maar dubieus uit.

Fat Pizza's pizza, they are big and they are cheezy


  • Standeman
  • Registratie: November 2000
  • Laatst online: 20:05

Standeman

Prutser 1e klasse

Topicstarter
JKVA schreef op zondag 20 november 2005 @ 23:31:
Ik ben niet thuis in dom4j, maar die eerste parameter in addNamespace ziet er maar dubieus uit.
Dat klopt wel een beetje. Ik doe dit omdat er anders een prefix bij de namespace komt:

rootElement.addNamespace("blaat", xmlns);

wordt dan

xmlns:blaat="http://www.eurid.eu/xml/epp/epp-1.0"

En dat is natuurlijk weer niet goed.

Wanneer ik rootElement.addAttribute("xmlns", xmlns), zie ik er gewoon niets van terug wanneer ik het document in een string verander ( document.asXML()).

The ships hung in the sky in much the same way that bricks don’t.


  • den 150
  • Registratie: Oktober 2002
  • Niet online
Waarschijnlijk geen dom4j probleem, maar een foutje in je schema. Check eens of in het schema op de root elementFormDefault="qualified" staat

  • Standeman
  • Registratie: November 2000
  • Laatst online: 20:05

Standeman

Prutser 1e klasse

Topicstarter
den 150 schreef op maandag 21 november 2005 @ 09:55:
Waarschijnlijk geen dom4j probleem, maar een foutje in je schema. Check eens of in het schema op de root elementFormDefault="qualified" staat
Hoe bedoel je dat precies? Ik zie hier niets van terug in het Element Interface of Document Interface.

[ Voor 3% gewijzigd door Standeman op 21-11-2005 14:48 ]

The ships hung in the sky in much the same way that bricks don’t.


  • den 150
  • Registratie: Oktober 2002
  • Niet online
elementFormDefault is een attribuut dat je op de root van je schema moet zetten (in de file dus, met bv notepad :) )

  • Standeman
  • Registratie: November 2000
  • Laatst online: 20:05

Standeman

Prutser 1e klasse

Topicstarter
den 150 schreef op maandag 21 november 2005 @ 17:27:
elementFormDefault is een attribuut dat je op de root van je schema moet zetten (in de file dus, met bv notepad :) )
Ok.. ik ben een beetje XML noob.

Ik moet een xml bericht via een socket naar een server sturen. Ik haal de data (text) op uit 1 van mijn objecten en creeer een xml file met:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
      DocumentFactory df = DocumentFactory.getInstance();
        Element rootElement = df.createElement(E_EPP);
        //rootElement.addAttribute(A_NS1, A_NS1_VALUE);
        rootElement.addNamespace("", A_NS1_VALUE);
        rootElement.addAttribute(A_NS2, A_NS2_VALUE);
        rootElement.addAttribute(A_NS3, A_NS3_VALUE);
        rootElement.addAttribute(A_NS4, A_NS4_VALUE);
        
        Element commandElement = df.createElement(this.E_COMMAND);
        rootElement.add(commandElement);

       etc.....

        Document document = df.createDocument();
        document.setRootElement(rootElement);


Hierna doe ik een document.asXML welke een string opleverd welke ik via een outputstream over de socket stuur. Aan files doe ik dus niet :)

Er komt dus niet echt notepad aan te pas (of heb je het over een xsd ofzo?)

edit.. ik heb wel een oplossing.. met String.replaceAll gooi ik xmlns="" uit het command element. Maar dat is een behoorlijk ranzige oplossing.

[ Voor 6% gewijzigd door Standeman op 21-11-2005 21:03 ]

The ships hung in the sky in much the same way that bricks don’t.


  • den 150
  • Registratie: Oktober 2002
  • Niet online
Ik heb het inderdaad over je xsd. In je xml staat op je root element
XML:
1
xsi:schemaLocation="http://www.eurid.eu/xml/epp/epp-1.0 epp-1.0.xsd"
, maar op je element onder je root staat
XML:
1
xmns=""

Als er in een xml schema
XML:
1
<xsd:schema blablabla elementFormDefault="unqualified" blablabla>
staat (of als het afwezig is, staat default op unqualified), dan wil dat zeggen dat voor een xml instance van jou schema enkel het root element als namespace de targetNamespace van je schema heeft, en al de rest heeft de lege namespace. Vandaar dat je xmlns="" zet. Zet je echter elementFormDefault="qualified", dan heeft elk element in je xml instance de namespace van je schema. Edit dus epp-1.0.xsd en zet elementFormDefault goed, dat zou je probleem moeten oplossen

  • den 150
  • Registratie: Oktober 2002
  • Niet online
Owkay, ik ben het denk ik veel te ver aan het zoeken. Jij maakt je element aan met enkel de naam, je moet de qualified name & namespace uri meegeven. Zie javadoc http://www.dom4j.org/apid...String, java.lang.String)

  • Standeman
  • Registratie: November 2000
  • Laatst online: 20:05

Standeman

Prutser 1e klasse

Topicstarter
den 150 schreef op dinsdag 22 november 2005 @ 16:20:
Owkay, ik ben het denk ik veel te ver aan het zoeken. Jij maakt je element aan met enkel de naam, je moet de qualified name & namespace uri meegeven. Zie javadoc http://www.dom4j.org/apid...String, java.lang.String)
Is dat verplicht?? aangezien je ook createElement(String name) hebt..

En aan de xsd kan ik denk ik weinig doen (hoewel.. alles kan), want die is niet door mij opgesteld en wordt ook niet door mij beheerd, maar door EurId..

[ Voor 15% gewijzigd door Standeman op 22-11-2005 21:52 ]

The ships hung in the sky in much the same way that bricks don’t.

Pagina: 1