[jdom-interest] Fwd: Formatting differences after migrating to JDOM2
Robert Krüger
krueger at lesspain.de
Sun Oct 6 10:09:33 PDT 2013
Hi Rolf,
On Sat, Oct 5, 2013 at 2:08 AM, Rolf <jdom at tuis.net> wrote:
> Hi Robert.
>
> Just so we are on the same page, when I run the code, I get the following
> output:
>
> with the setTextMode(...):
> new
> XMLOutputter(Format.getPrettyFormat().setTextMode(Format.TextMode.PRESERVE)).output(document,
> System.out);
> <?xml version="1.0" encoding="UTF-8"?>
> <root>
> <sub1>
> <sub2>
> Some text
> </sub2><sub2>
>
> text with left and right whitespace
> </sub2>
> </sub1>
> </root>
>
>
> without the setTextMode(...)
> new XMLOutputter(Format.getPrettyFormat()).output(document,
> System.out);
> <?xml version="1.0" encoding="UTF-8"?>
> <root>
> <sub1>
> <sub2>Some text</sub2>
> <sub2>text with left and right whitespace</sub2>
> </sub1>
> </root>
>
> The plain "Pretty" format is the way I think you want the output, and it is
> right, right?
Yes, except for whitespace being trimmed. I do not want that but want
indenting and no whitespace trimming for text-only elements (that was
the behaviour of JDOM1). The use case is that I use xml to store data
(e.g. user input of a content management system) and removing
whitespace modifies the data, which I do not want to happen but I do
want indenting.
>
> It is very unusual for someone ysing the PrettyFormat to modify the
> TextMode.... I wonder why you have the setTextMode() at all...
see above.
>
> Rolf
Robert
>
>
>
> On 30/09/2013 9:43 AM, Robert Krüger wrote:
>>
>> forgot to reply to the list
>>
>>
>> ---------- Forwarded message ----------
>> From: Robert Krüger <krueger at lesspain.de>
>> Date: Mon, Sep 30, 2013 at 3:42 PM
>> Subject: Re: [jdom-interest] Formatting differences after migrating to
>> JDOM2
>> To: Rolf <jdom at tuis.net>
>>
>>
>> This reproduces the behaviour:
>>
>> import org.jdom2.Document;
>> import org.jdom2.Element;
>> import org.jdom2.output.Format;
>> import org.jdom2.output.XMLOutputter;
>>
>> public class JDOMOutput {
>>
>> public static void main(String argv[]) throws Exception{
>> Document document = new Document();
>> Element root = new Element("root");
>> document.addContent(root);
>> Element sub1 = new Element("sub1");
>> root.addContent(sub1);
>> sub1.addContent(new Element("sub2").setText("Some text"));
>> sub1.addContent(new Element("sub2").setText(" text with left
>> and right whitespace "));
>> new
>> XMLOutputter(Format.getPrettyFormat().setTextMode(Format.TextMode.PRESERVE)).output(document,
>> System.out);
>> }
>>
>> }
>>
>> Try with and without the setTextMode(Format.TextMode.PRESERVE). None
>> of them does what I need.
>>
>> On Sun, Sep 29, 2013 at 7:10 PM, Robert Krüger <krueger at lesspain.de>
>> wrote:
>>>
>>> Hi,
>>>
>>> it is part of a large application. I will try to build a simple test
>>> program that demonstrates the effect.
>>>
>>> Cheers,
>>>
>>> Robert
>>>
>>> On Sun, Sep 29, 2013 at 5:26 PM, Rolf <jdom at tuis.net> wrote:
>>>>
>>>> Hi Robert.
>>>>
>>>> This is surprising indeed, and I agree it should not be different from
>>>> JDOM
>>>> 1.x
>>>>
>>>> Can you get me a copy of the input file and the relevant parts of Java
>>>> code?
>>>> You don't need to CC the whole list it is large...
>>>>
>>>> Thanks
>>>>
>>>> Rolf
>>>>
>>>>
>>>> On 29/09/2013 10:42 AM, Robert Krüger wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> I just migrated my code to from JDOM to JDOM2 and noticed some of our
>>>>> unit tests failed. The reason is different formatting. I used
>>>>> Format.getPrettyFormat().setTextMode(PRESERVE) for the formatting and
>>>>> with jdom this produced output like the following
>>>>>
>>>>> <av-container format-version="0.3.4">
>>>>> <container-format>MP4</container-format>
>>>>> <bitrate>646448</bitrate>
>>>>> <duration>2002002</duration>
>>>>> <start-time>0</start-time>
>>>>> <acquisition-timestamp>1340887741000</acquisition-timestamp>
>>>>> <stream>
>>>>> <type>VIDEO</type>
>>>>> <codec>H.264</codec>
>>>>> ...
>>>>>
>>>>> after replacing the imports by jdom2 I got
>>>>>
>>>>> <av-container format-version="0.3.4">
>>>>> <container-format>
>>>>> MP4
>>>>> </container-format><bitrate>
>>>>> 646448
>>>>> </bitrate><duration>
>>>>> 2002002
>>>>> </duration><start-time>
>>>>> 0
>>>>> </start-time><acquisition-timestamp>
>>>>> 1340887741000
>>>>> </acquisition-timestamp><stream>
>>>>> <type>
>>>>> VIDEO
>>>>> </type><codec>
>>>>> H.264
>>>>> </codec>...
>>>>>
>>>>> This looks rather broken as it does not preserve the original data at
>>>>> all with all those added newlines. Removing the setTextMode(PRESERVE)
>>>>> restored the format to what is shown above but the reason I added
>>>>> setTextMode(PRESERVE) was that without it, whitespace was trimmed and
>>>>> I do not want that for elements with text content.
>>>>>
>>>>> Is this a bug? How can I achieve what I want, i.e. have a "pretty",
>>>>> i.e. indented format and have text-only elements preserve whitespace?
>>>>>
>>>>> Thanks in advance,
>>>>>
>>>>> Robert
>>>>> _______________________________________________
>>>>> To control your jdom-interest membership:
>>>>> http://www.jdom.org/mailman/options/jdom-interest/youraddr@yourhost.com
>>>>>
>> _______________________________________________
>> To control your jdom-interest membership:
>> http://www.jdom.org/mailman/options/jdom-interest/youraddr@yourhost.com
>
>
More information about the jdom-interest
mailing list