Uploaded image for project: 'Xerces-C++'
  1. Xerces-C++
  2. XERCESC-661

DOMWriter doesn't work correctly

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Resolution: Fixed
    • 2.1.0
    • 2.2.0
    • DOM
    • None
    • Operating System: Windows NT/2K
      Platform: Other
    • 13447

    Description

      I encountered some problems using the DOMWriter:

      1) Layout output XML file
      When I set the 'FormatPrettyPrint' feature and set the 'NewLine' to "\r\n", I
      expect to get a properly layout of XML. But the output is 'one' line with the
      XML.

      2) Very slow in writing
      I'am trying to construct a XML structure with the DOM and write this to a file.
      The constructing of the XML structure takes no more then a few seconds. The
      writing to the file (LocalFileFormatTarget) takes more then 2 minutes for a
      file of +/- 100k !? I tryed a workaround by using the MemBufFormatTarget and
      writing the buffer to a file. This is a lot faster (takes a few seconds), but
      this can't be done with UNICODE strings.

      3) Can't write UNICODE (UTF-8)
      I want to write the XML to a file in Unicode with UTF-8 encoding. I can open a
      XML file with UTF-8 encoding correctly. But when I write it to a file it is
      always ANSI and not Unicode.

      I use Xerces-C++ in combination with VC++ 6.0 on a Windows 2000 machine.

      code sample:

      try

      { // get a serializer, an instance of DOMWriter XMLCh tempStr[100]; XMLString::transcode("LS", tempStr, 99); DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(tempStr); DOMWriter *theSerializer = ((DOMImplementationLS*)impl)- >createDOMWriter(); // set user specified end of line sequence and output encoding theSerializer->setNewLine( X("\r\n") ); // plug in user's own error handler DOMErrorHandler *myErrorHandler = new CXmlErrorHandler(); theSerializer->setErrorHandler(myErrorHandler); // set feature if the serializer supports the feature/mode bool gFormatPrettyPrint = true; if (theSerializer->canSetFeature (XMLUni::fgDOMWRTFormatPrettyPrint, gFormatPrettyPrint)) theSerializer->setFeature (XMLUni::fgDOMWRTFormatPrettyPrint, gFormatPrettyPrint); // // Plug in a format target to receive the resultant // XML stream from the serializer. // // StdOutFormatTarget prints the resultant XML stream // to stdout once it receives any thing from the serializer. // MemBufFormatTarget *myTarget = new MemBufFormatTarget(); //new LocalFileFormatTarget( strFilename ); //new StdOutFormatTarget(); // // do the serialization through DOMWriter::writeNode(); // theSerializer->writeNode(myTarget, *m_pDocument); ofstream lFile(strFilename); lFile << myTarget->getRawBuffer() << endl; delete theSerializer; // // Filter, formatTarget and error handler // are NOT owned by the serializer. // delete myTarget; bRetval = !((CXmlErrorHandler*)myErrorHandler)->getSawErrors(); delete myErrorHandler; //if (gUseFilter) // delete myFilter; }

      catch (XMLException& e)

      { cerr << "An error occurred during creation of output transcoder. Msg is:" << endl << StrX(e.getMessage()) << endl; bRetval = false; }

      Attachments

        Activity

          People

            Unassigned Unassigned
            jlo@hne.nl Jan Louws
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: