title: writing XML with Xerces 3.0.1 and C++ on windows
body: <p>i have the following function i wrote to create an XML file using Xerces 3.0.1, if i call this function with a filePath of "foo.xml" or "../foo.xml" it works great, but if i pass in "c:/foo.xml" then i get an exception on this line</p>
  
  <pre><code>XMLFormatTarget *formatTarget = new LocalFileFormatTarget(targetPath);
  </code></pre>
  
  <p>can someone explain why my code works for relative paths, but not absolute paths please?
  many thanks.</p>
  
  <pre><code>const int ABSOLUTE_PATH_FILENAME_PREFIX_SIZE = 9;
  
  void OutputXML(xercesc::DOMDocument* pmyDOMDocument, std::string filePath)
  {
      //Return the first registered implementation that has the desired features. In this case, we are after a DOM implementation that has the LS feature... or Load/Save.
      DOMImplementation *implementation = DOMImplementationRegistry::getDOMImplementation(L"LS");
  
      // Create a DOMLSSerializer which is used to serialize a DOM tree into an XML document.
      DOMLSSerializer *serializer = ((DOMImplementationLS*)implementation)-&gt;createLSSerializer();
  
      // Make the output more human readable by inserting line feeds.
      if (serializer-&gt;getDomConfig()-&gt;canSetParameter(XMLUni::fgDOMWRTFormatPrettyPrint, true))
          serializer-&gt;getDomConfig()-&gt;setParameter(XMLUni::fgDOMWRTFormatPrettyPrint, true);
  
      // The end-of-line sequence of characters to be used in the XML being written out. 
      serializer-&gt;setNewLine(XMLString::transcode("\r\n")); 
  
      // Convert the path into Xerces compatible XMLCh*.
      XMLCh *tempFilePath = XMLString::transcode(filePath.c_str());
  
      // Calculate the length of the string.
      const int pathLen = XMLString::stringLen(tempFilePath);
  
      // Allocate memory for a Xerces string sufficent to hold the path.
      XMLCh *targetPath = (XMLCh*)XMLPlatformUtils::fgMemoryManager-&gt;allocate((pathLen + ABSOLUTE_PATH_FILENAME_PREFIX_SIZE) * sizeof(XMLCh));
  
      // Fixes a platform dependent absolute path filename to standard URI form.
      XMLString::fixURI(tempFilePath, targetPath);
  
      // Specify the target for the XML output.
      XMLFormatTarget *formatTarget = new LocalFileFormatTarget(targetPath);
      //XMLFormatTarget *myFormTarget = new StdOutFormatTarget();
  
      // Create a new empty output destination object.
      DOMLSOutput *output = ((DOMImplementationLS*)implementation)-&gt;createLSOutput();
  
      // Set the stream to our target.
      output-&gt;setByteStream(formatTarget);
  
      // Write the serialized output to the destination.
      serializer-&gt;write(pmyDOMDocument, output);
  
      // Cleanup.
      serializer-&gt;release();
      XMLString::release(&amp;tempFilePath);
      delete formatTarget;
      output-&gt;release();
  }
  </code></pre>