/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
xml og Transformer
Fra : Thomas Bendsen


Dato : 10-11-05 21:29

Hej

Jeg skal gemme (eller serialisere eller hvad det nu hedder) et DOM
dokument i en xml-fil, og vil gerne have at elementerne bliver pænt
indrykket.

På et eller andet tidspunkt (måske i forbindelse med min opgradering til
java 5.0) er det imidlertid holdt op med at virke (dvs. xml-files
genereres fint, men der bliver ikke lavet indrykninger).

Den kode jeg bruger er esssentielt set følgende:

//document er mit DOM-object
document.normalize();
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(xmlFile);

transformer.setOutputProperty("indent","yes");
transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount","5");
transformer.transform(source, result);


Er der nogen som kan forklare mig hvorfor dette ikke længere virker (og
meget gerne hvordan jeg får det til at virke)?

Jeg har nu brugt en aften på at sidde og læse om XSLT og bladre igennem
diverse tutorial om java og xml, uden at jeg synes at være blevet
klogere. Under alle omstændigheder virker XSLT som "overkill" når det
blot drejer sig om indrykninger.

Med venlig hilsen
Thomas Bendsen

 
 
Michael Zedeler (10-11-2005)
Kommentar
Fra : Michael Zedeler


Dato : 10-11-05 21:40

Thomas Bendsen wrote:
> Jeg skal gemme (eller serialisere eller hvad det nu hedder) et DOM
> dokument i en xml-fil, og vil gerne have at elementerne bliver pænt
> indrykket.
>
> På et eller andet tidspunkt (måske i forbindelse med min opgradering til
> java 5.0) er det imidlertid holdt op med at virke (dvs. xml-files
> genereres fint, men der bliver ikke lavet indrykninger).
>[klip]
> transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount","5");
>[klip]
> Er der nogen som kan forklare mig hvorfor dette ikke længere virker (og
> meget gerne hvordan jeg får det til at virke)?

Efter Java 5.0 er xalan blevet en del af Suns Java-distribution, men den
har også skiftet namespace, så det er meget muligt at ovenstående
property hedder noget andet nu. Det kan du slå op i deres
online-dokumentation på java.sun.com.

> [klip] Under alle omstændigheder virker XSLT som "overkill" når det
> blot drejer sig om indrykninger.

Ja. Det kan gøres enkelt med SAX, hvis du bare har en SAX-serializer.
Det forudsætter dog at du ikke bruger mixed content eller i det mindste
accepterer at du også kommer til at indrykke elementer i mixed content,
hvilket kan se en kende fjollet ud.

Mvh. Michael.
--
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Michael Zedeler (10-11-2005)
Kommentar
Fra : Michael Zedeler


Dato : 10-11-05 22:47

Michael Zedeler wrote:
> Thomas Bendsen wrote:
>> transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount","5");
>
> Efter Java 5.0 er xalan blevet en del af Suns Java-distribution, men den
> har også skiftet namespace, så det er meget muligt at ovenstående
> property hedder noget andet nu. Det kan du slå op i deres
> online-dokumentation på java.sun.com.

Jeg fandt den her:

http://java.sun.com/j2se/1.5.0/docs/api/index.html

Mvh. Michael.

--
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Michael Zedeler (10-11-2005)
Kommentar
Fra : Michael Zedeler


Dato : 10-11-05 22:48

Michael Zedeler wrote:
> Michael Zedeler wrote:
>
>> Thomas Bendsen wrote:
>>
>>> transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount","5");
>>
>>
>>
>> Efter Java 5.0 er xalan blevet en del af Suns Java-distribution, men
>> den har også skiftet namespace, så det er meget muligt at ovenstående
>> property hedder noget andet nu. Det kan du slå op i deres
>> online-dokumentation på java.sun.com.
>
> http://java.sun.com/j2se/1.5.0/docs/api/index.html

Ups. Sorry. Her:

http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/OutputKeys.html

Mvh. Michael.
--
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Thomas Bendsen (11-11-2005)
Kommentar
Fra : Thomas Bendsen


Dato : 11-11-05 14:51

Michael Zedeler wrote:
> Michael Zedeler wrote:
>
>> Michael Zedeler wrote:
>>
>>> Thomas Bendsen wrote:
>>>
>>>> transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount","5");
>>>
>>>
>>>
>>>
>>>
>>> Efter Java 5.0 er xalan blevet en del af Suns Java-distribution, men
>>> den har også skiftet namespace, så det er meget muligt at ovenstående
>>> property hedder noget andet nu. Det kan du slå op i deres
>>> online-dokumentation på java.sun.com.
>>
>>
>> http://java.sun.com/j2se/1.5.0/docs/api/index.html
>
>
> Ups. Sorry. Her:
>
> http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/OutputKeys.html
>
> Mvh. Michael.

Hej Michael

Tak for dit forslag med Sax-serializeren. Det tror jeg at jeg vil kigge
lidt nærmere på. Jeg har lige siddet og leget med nogle af de gamle
1.4.2 versioner af mit program, og indrykningen har tilsyneladende
aldrig fungeret helt optimalt . Den fungerede fint på et nyt dokument
som programmet genererede men på indlæste xml-filer sker der underlige
ting (under 1.5 virker indrykningen imidlertid overhovedet ikke). Så der
er nok noget fundamentalt jeg endnu ikke har forstået.

Mht {http://xml.apache.org/xalan}indent-amount rækker mine evner ikke
til at finde noget som helst på den side du henviser til.


MVh Thomas

Arne Vajhøj (11-11-2005)
Kommentar
Fra : Arne Vajhøj


Dato : 11-11-05 15:32

Thomas Bendsen wrote:
> Tak for dit forslag med Sax-serializeren. Det tror jeg at jeg vil kigge
> lidt nærmere på. Jeg har lige siddet og leget med nogle af de gamle
> 1.4.2 versioner af mit program, og indrykningen har tilsyneladende
> aldrig fungeret helt optimalt . Den fungerede fint på et nyt dokument
> som programmet genererede men på indlæste xml-filer sker der underlige
> ting (under 1.5 virker indrykningen imidlertid overhovedet ikke). Så der
> er nok noget fundamentalt jeg endnu ikke har forstået.
>
> Mht {http://xml.apache.org/xalan}indent-amount rækker mine evner ikke
> til at finde noget som helst på den side du henviser til.

Hvis du kan leve med at bruge Xerces klasser:

OutputFormat fmt = new OutputFormat();
fmt.setIndenting(true);
XMLSerializer ser = new XMLSerializer(System.out, fmt);
ser.serialize(doc);

Arne

Thomas Bendsen (11-11-2005)
Kommentar
Fra : Thomas Bendsen


Dato : 11-11-05 20:57

Arne Vajhøj wrote:
> Thomas Bendsen wrote:
>
>> Tak for dit forslag med Sax-serializeren. Det tror jeg at jeg vil
>> kigge lidt nærmere på. Jeg har lige siddet og leget med nogle af de
>> gamle 1.4.2 versioner af mit program, og indrykningen har
>> tilsyneladende aldrig fungeret helt optimalt . Den fungerede fint på
>> et nyt dokument som programmet genererede men på indlæste xml-filer
>> sker der underlige ting (under 1.5 virker indrykningen imidlertid
>> overhovedet ikke). Så der er nok noget fundamentalt jeg endnu ikke har
>> forstået.
>>
>> Mht {http://xml.apache.org/xalan}indent-amount rækker mine evner ikke
>> til at finde noget som helst på den side du henviser til.
>
>
> Hvis du kan leve med at bruge Xerces klasser:
>
> OutputFormat fmt = new OutputFormat();
> fmt.setIndenting(true);
> XMLSerializer ser = new XMLSerializer(System.out, fmt);
> ser.serialize(doc);
>
> Arne

Hej Arne

Jeg ved godt at man ikke skal udtale sig om ting man ikke ved noget om
(og jeg ved ikke noget om xml); men alligevel vil jeg konstatere at du
(i hvert fald i min verden) er ret genial.
Nu har jeg i snart to år været irriteret over at jeg ikke kunne få
indrykningen til at fungere ordentligt (indtil det endeligt holdt helt
op med at virke), og så løser du det med 4 linier.

Det er heldigvis ikke et noget problem at løsningen er baseret på
eksterne biblioteker, da jeg i forvejen benytter et til exif-data og et
til ftp.

MVH Thomas

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste