[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