[jdom-interest] Fwd: Formatting differences after migrating to JDOM2

Rolf jdom at tuis.net
Fri Oct 4 17:08:48 PDT 2013


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?

It is very unusual for someone ysing the PrettyFormat to modify the 
TextMode.... I wonder why you have the setTextMode() at all...

Rolf


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