Создание XML без атрибута кодирования в прологе с использованием XmlLite IXmlWriter (C++)

Я использую библиотеку XmlLite для создания файла XML. Я хочу, чтобы в прологе XML-файла не содержался атрибут кодирования (только версия):

<?xml version="1.0"?>

Вот мой код:

    HRESULT hr = S_OK;
    IStream *pOutFileStream = NULL;
    IXmlWriter *pWriter = NULL;
    CComPtr<IXmlWriterOutput> pWriterOutput;

    //Open writeable output stream
    if (FAILED(hr = SHCreateStreamOnFile(output_file_name, STGM_CREATE | STGM_WRITE, &pOutFileStream)))
    {
        wprintf(L"Error creating file writer, error is %08.8lx", hr);
        HR(hr);
    }

    if (FAILED(hr = CreateXmlWriter(__uuidof(IXmlWriter), (void**) &pWriter, NULL)))
    {
        wprintf(L"Error creating xml writer, error is %08.8lx", hr);
        HR(hr);
    }

    if(FAILED(CreateXmlWriterOutputWithEncodingName(pOutFileStream, NULL, L"UTF-8", &pWriterOutput))){
        wprintf(L"Error setting xml encoding, error is %08.8lx", hr);
        HR(hr);
    }

    if (FAILED(hr = pWriter->SetOutput(pWriterOutput)))
    {
        wprintf(L"Error, Method: SetOutput, error is %08.8lx", hr);
        HR(hr);
    }

    if (FAILED(hr = pWriter->SetProperty(XmlWriterProperty_Indent, 4)))
    {
        wprintf(L"Error, Method: SetProperty XmlWriterProperty_Indent, error is %08.8lx", hr);
        HR(hr);
    }

    if (FAILED(hr = pWriter->WriteStartDocument(XmlStandalone_Omit)))
    {
        wprintf(L"Error, Method: WriteStartDocument, error is %08.8lx", hr);
        HR(hr);
    } 

Я попытался удалить звонок CreateXmlWriterOutputWithEncodingName() но даже тогда создается атрибут кодировки по умолчанию с UTF-8. Я также пытался положить NULL в качестве третьего параметра этой функции.

Помощь будет высоко ценится!

1 ответ

Решение

Декларация XML написана WriteStartDocument метод.

Вместо звонка WriteStartDocument, ты можешь позвонить WriteProcessingInstruction с L"xml" как имя инструкции по обработке, чтобы написать объявление XML так, как вы хотите, например:

if (FAILED(hr = pWriter->WriteProcessingInstruction(L"xml", L"version=\"1.0\"")))
{
    wprintf(L"Error, Method: WriteProcessingInstruction, error is %08.8lx", hr); 
    HR(hr); 
}

Это запишет объявление XML как <?xml version="1.0"?>,

Другие вопросы по тегам