У меня есть следующая функция, которую я написал для создания XML-файла с использованием Xerces 3.0.1, если я вызываю эту функцию с filePath из "foo.xml" или "../foo.xml", это прекрасно работает, но я передаю "c: /foo.xml", затем я получаю исключение в этой строке
XMLFormatTarget *formatTarget = new LocalFileFormatTarget(targetPath);
Может кто-нибудь объяснить, почему мой код работает для относительных путей, но не для абсолютных путей, пожалуйста?
большое спасибо.
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)->createLSSerializer();
// Make the output more human readable by inserting line feeds.
if (serializer->getDomConfig()->canSetParameter(XMLUni::fgDOMWRTFormatPrettyPrint, true))
serializer->getDomConfig()->setParameter(XMLUni::fgDOMWRTFormatPrettyPrint, true);
// The end-of-line sequence of characters to be used in the XML being written out.
serializer->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->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)->createLSOutput();
// Set the stream to our target.
output->setByteStream(formatTarget);
// Write the serialized output to the destination.
serializer->write(pmyDOMDocument, output);
// Cleanup.
serializer->release();
XMLString::release(&tempFilePath);
delete formatTarget;
output->release();
}