Я в итоге обошелся без XmlDocument, правда, XmlTextWriter пришлось заменить на XmlWriter, но с т.з. кода, пишущего XML, это изменение не должно на что-то повлиять.
X++:
#macrolib.File
#define.XmlTextWriterEncoding('windows-1251')
Filename fileNameS;
XmlWriterSettings writerSettings;
XmlWriter xmlWriter;
void writeXML(XmlTextWriter _writer)
{
_writer.writeStartElement('root');
_writer.writeStartElement('test');
_writer.writeAttributeString('attr1', 'значение1');
_writer.writeAttributeString('attr2', 'значение2');
_writer.writeEndElement();
_writer.writeEndElement();
}
;
if (isRunningOnServer())
{
new FileIOPermission('', #io_read).assert();
fileNameS = WinAPIServer::getTempFileName();
CodeAccessPermission::revertAssert();
}
else
{
fileNameS = WinAPI::getTempFilename(WinAPI::getTempPath(), 'xml');
}
info(strFmt('%1 %2', xGlobal::computerName(), fileNameS));
new FileIOPermission(fileNameS, #io_write).assert();
writerSettings = new XmlWriterSettings();
writerSettings.encoding(#XmlTextWriterEncoding);
xmlWriter = XmlWriter::newFile(fileNameS, writerSettings);
xmlWriter.writeStartDocument();
writeXML(xmlWriter);
xmlWriter.writeEndDocument();
xmlWriter.close();
NB! Если код записи в XML будет выполняться в CIL, то может понадобиться заменить тип параметра в вызовах с XmlTextWriter на XmlWriter.