Sent: Friday, September 15, 2017 at 4:30 PM From: "Jimmie Houchin" <jlhouchin@gmail.com> To: "Any question about pharo is welcome" <pharo-users@lists.pharo.org> Subject: Re: [Pharo-users] Writing XML
I didn't pay attention to this previously. But I just noticed that using #printToFileNamed: preserved the DOM tree's original line ending where as previously I had to insure the the XMLWriter #lineEnding was changed from defaultLineEnding to canonicalLineEnding. The original document used LF and not CR.
To clarify, #printToFileNamed: and company use CRLF on Windows and LF elsewhere. XMLWriter uses Pharo's LE by default (CR), but it will use the preferred LE of your platform (LF or CRLF) with #enablePlatformSpecificLineBreak, LF when canonical XML (https://www.w3.org/TR/xml-c14n) is enabled, or whatever LE you want with #lineBreak:. You can use #printToFileNamed:beforeWritingDo: with a block that sends #lineBreak: to the writer argument to get a custom LE when printing a DOM tree to a file.
Overall this was a nice win. It cleaned up my method to save the file and reduced 7 lines to 2. Nice. :)
Thanks.
Jimmie
On 09/15/2017 09:29 AM, monty wrote:
If you want to write a DOM tree to a file, send #printToFileNamed: (or a related message like #canonicallyPrintToFileNamed: or #printToFileNamed:beforeWritingDo:) to the root. See the XMLNode "printing" category for more. This will automatically encode the file with the encoding the XMLDocument>>#encoding attribute specifies (if recognized), and it's portable across Pharo, Squeak, and GemStone. Use #parseFileNamed:/#onFileNamed: to get portable automatic file decoding when parsing.
Sent: Wednesday, September 13, 2017 at 1:02 PM From: "Jimmie Houchin" <jlhouchin@gmail.com> To: "Any question about pharo is welcome" <pharo-users@lists.pharo.org> Subject: [Pharo-users] Writing XML
Hello,
I am attempting to read and write an XML document.
Currently I have parsed the document successfully. I have basic navigation and have learned how to modify the XMLDocument.
Now I want to write the modified document back to the file system. What I have tried so far is:
writer := XMLWriter new. xmldoc document writeXMLOn: writer. writer stream. f := File openForWriteFileNamed: '/home/jimmie/xmldoc.xml'. f nextPutAll: (writer write contents). f flush. f close.
It does write an xml document to the file system. However, it has exploded in size. The original is 28mb and is in UTF-8. The newly written file is 112mb and is UTF-32.
I do not know why the change in encoding or how to correct or manually set the encoding.
Any help in understanding how to correctly write an XML document that I have read and minimally modified would be greatly appreciated.
Thanks.
Jimmie