Visual c++ msxmldom&;添加多个处理指令

Visual c++ msxmldom&;添加多个处理指令,visual-c++,msxml,Visual C++,Msxml,msxmldll:msxml3.DLL 我正在使用msxmldom编写XML&希望添加多个处理指令。 例: 第一条处理指令。 xml version=“1.0”encoding=“ISO-8859-1”? 第二处理指令 //Add header with XML version 1.0 MSXML2::IXMLDOMProcessingInstructionPtr ptrPI = m_docPtr->createProcessingInstruction(L"xml", L"version

msxmldll:msxml3.DLL

我正在使用msxmldom编写XML&希望添加多个处理指令。 例:

第一条处理指令。

xml version=“1.0”encoding=“ISO-8859-1”?

第二处理指令

//Add header with XML version 1.0
MSXML2::IXMLDOMProcessingInstructionPtr ptrPI = m_docPtr->createProcessingInstruction(L"xml", L"version='1.0' encoding='UTF-8'");
m_docPtr->insertBefore(ptrPI, m_docPtr->documentElement.GetInterfacePtr());

//Add header with XML stylesheet
MSXML2::IXMLDOMProcessingInstructionPtr ptrPI1 = m_docPtr->createProcessingInstruction(L"xml-stylesheet", L"type='text/xsl' href='test1.xsl");
m_docPtr->insertBefore(ptrPI1, m_docPtr->documentElement.GetInterfacePtr());
xml样式表type=“text/xsl”href=“cdcatalog.xsl”?

我使用MSXMLDOM编写了以下代码。但它未能添加第一和第二条处理指令

代码开始

MSXML2::IXMLDOMElementPtr pXMLRootElem;
MSXML2::IXMLDOMNodePtr pTestDOMNodePtr;

//Create an instance of the DOMDocument object:
m_docPtr.CreateInstance(__uuidof(MSXML2::DOMDocument30));

char* xmlfile =  (char*)xmlFileFullPath.c_str();

_variant_t varXml(xmlfile); //XML file to load

m_docPtr->async = VARIANT_FALSE;

m_docPtr->validateOnParse = VARIANT_FALSE;

m_docPtr->resolveExternals = VARIANT_FALSE;

//load XML file.

if(m_docPtr->loadXML(_T("<catalog><cd></cd></catalog>")) == VARIANT_FALSE)

{

       CCommonFunction::log ("Failed to create the XML file.");

       return false;

}

//Get the root element just created    

pXMLRootElem = m_docPtr->GetdocumentElement();

//// Add first ProcessingInstruction <?xml version="1.0" encoding="ISO-8859-1"?>

MSXML2::IXMLDOMProcessingInstructionPtr pXMLProcessingNode =  

  m_docPtr->createProcessingInstruction("xml", " version='1.0' encoding='UTF-8'");

_variant_t vtObject;

vtObject.vt = VT_DISPATCH;

vtObject.pdispVal = pXMLRootElem;

vtObject.pdispVal->AddRef();

m_docPtr->insertBefore(pXMLProcessingNode,vtObject);

//// Add second ProcessingInstruction ?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>

MSXML2::IXMLDOMProcessingInstructionPtr pXSLTNode =  

m_docPtr->createProcessingInstruction("xml-stylesheet", "type='text/xsl' href='cdcatalog.xsl'");

m_docPtr->insertBefore(pXSLTNode,vtObject);
MSXML2::IXMLDOMElementPtr pXMLRootElem;
MSXML2::IXMLDOMNodePtr pTestDOMNodePtr;
//创建DOMDocument对象的实例:
m_docPtr.CreateInstance(u uuidof(MSXML2::DOMDocument30));
char*xmlfile=(char*)xmlFileFullPath.c_str();
_variant_t varXml(xmlfile)//要加载的XML文件
m_docPtr->async=VARIANT_FALSE;
m_docPtr->validateOnParse=VARIANT_FALSE;
m_docPtr->resolveExternals=VARIANT_FALSE;
//加载XML文件。
如果(m_docPtr->loadXML(_T(“”)=VARIANT_FALSE)
{
CCommonFunction::log(“未能创建XML文件”);
返回false;
}
//获取刚刚创建的根元素
pXMLRootElem=m_docPtr->GetdocumentElement();
////添加第一个处理指令
MSXML2::IXMLDOMProcessingInstructionPtr pXMLProcessingNode=
m_docPtr->createProcessingInstruction(“xml”,“版本='1.0'编码='UTF-8'”);
_变量对象;
vtObject.vt=vt\u调度;
vtObject.pdispVal=pXMLRootElem;
pdispVal->AddRef();
m_docPtr->insertBefore(pXMLProcessingNode,vtObject);
////添加第二个处理指令?xml样式表type=“text/xsl”href=“cdcatalog.xsl”?>
MSXML2::IXMLDOMProcessingInstructionPtr pXSLTNode=
m_docPtr->createProcessingInstruction(“xml样式表”,“type='text/xsl'href='cdcatalog.xsl');
m_docPtr->insertBefore(pXSLTNode,vtObject);

请帮助理解为什么MSXML不添加多条处理指令?我找到了解决方案:

//Add header with XML version 1.0
MSXML2::IXMLDOMProcessingInstructionPtr ptrPI = m_docPtr->createProcessingInstruction(L"xml", L"version='1.0' encoding='UTF-8'");
m_docPtr->insertBefore(ptrPI, m_docPtr->documentElement.GetInterfacePtr());

//Add header with XML stylesheet
MSXML2::IXMLDOMProcessingInstructionPtr ptrPI1 = m_docPtr->createProcessingInstruction(L"xml-stylesheet", L"type='text/xsl' href='test1.xsl");
m_docPtr->insertBefore(ptrPI1, m_docPtr->documentElement.GetInterfacePtr());