我正在使用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
作为该函数的第三个参数。
非常感谢协助!
答案 0 :(得分:1)
XML声明由WriteStartDocument
method编写。
您可以使用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"?>
。