从文件引入XML数据并插入到一个新文件?
函数createNewXMLfile执行,输出新XML文件,
读入数据子节点列表,但实际插入的节点为奇数个的节点,这样读到一半多点的时候就报超限的错误?
请教!!!!//函数:读一个XML文件,并返回DATA节点下的子节点列表
void LoadXMLAndBackNodeList(
/* in */char cxmlpathfilename[256],//文件名
/*out */MSXML::IXMLDOMNodeList **pchildListdata)
{
*pchildListdata=NULL; CoInitialize(NULL);
MSXML::IXMLDOMDocumentPtr pDocdata;
HRESULT hrdata =pDocdata.CreateInstance(__uuidof(MSXML::DOMDocument));
if(SUCCEEDED(hrdata))
{
pDocdata->load(cxmlpathfilename);
MSXML::IXMLDOMElementPtr pDocElementdata=pDocdata->GetdocumentElement();
//DATA
MSXML::IXMLDOMElementPtr pElementdata=pDocElementdata->selectSingleNode("DATA");
//获得子节点列表
pElementdata->get_childNodes(pchildListdata);
}
CoUninitialize();
return;
}//函数创建新XML文件,并将LoadXMLAndBackNodeList读入的节点列表加入到新文件
void createNewXMLfile()
{
CString cstemp="";
CoInitialize(NULL); //初始化COM 环境
MSXML::IXMLDOMDocumentPtr pDoc;
HRESULT hr =pDoc.CreateInstance(__uuidof(MSXML::DOMDocument));
if(!SUCCEEDED(hr)) return; //创建下面行
//<?xml version="1.0" encoding="UTF-8" ?>
try
{
MSXML::IXMLDOMProcessingInstructionPtr pPI = NULL;
cstemp.Format("version='%s' encoding='%s'","1.0","UTF-8");
pPI=pDoc->createProcessingInstruction((_bstr_t)"xml", (_bstr_t)cstemp);
pDoc->appendChild(pPI);
}
catch (_com_error e)
{
} //0-根 SCL
MSXML::IXMLDOMElementPtr pDocElement=pDoc->createElement("SCL");
pDoc->appendChild(pDocElement); //将LoadXMLAndBackNodeList读入的节点列表加入到新文件 MSXML::IXMLDOMNodeList *pchildListdata;
LoadXMLAndBackNodeList("c:\\data.xml",&pchildListdata);
if(pchildListdata != NULL)
{
//获得子节点的个数
long ilen=0;
pchildListdata->get_length(&ilen);
MSXML::IXMLDOMNode *pchildNodedata; for(long i=0;i<ilen;i++)
{
//获得0节点并取名字
pchildNodedata=NULL;
pchildListdata->get_item(i,&pchildNodedata); pDocElement->appendChild(pchildNodedata);
}
}
pDoc->save("c:\\new.xml");
CoUninitialize();
return;
}//原data.xml文件
<base>
<DATA>
<DOType cdc="INC" id="INC">
</DOType>
<DOType cdc="INS" id="INS">
</DOType>
<DOType cdc="LPL" id="LPL">
</DOType>
<DOType cdc="DPL" id="DPL">
</DOType>
<DOType cdc="SPS" id="SPS">
</DOType>
<DOType cdc="MV" id="MV">
</DOType>
<DOType cdc="CMV" id="CMV">
</DOType>
</DATA>
</base>
//想生成的文件new.xml
<SCL>
<DOType cdc="INC" id="INC">
</DOType>
<DOType cdc="INS" id="INS">
</DOType>
<DOType cdc="LPL" id="LPL">
</DOType>
<DOType cdc="DPL" id="DPL">
</DOType>
<DOType cdc="SPS" id="SPS">
</DOType>
<DOType cdc="MV" id="MV">
</DOType>
<DOType cdc="CMV" id="CMV">
</DOType>
</SCL>
函数createNewXMLfile执行,输出新XML文件,
读入数据子节点列表,但实际插入的节点为奇数个的节点,这样读到一半多点的时候就报超限的错误?
请教!!!!//函数:读一个XML文件,并返回DATA节点下的子节点列表
void LoadXMLAndBackNodeList(
/* in */char cxmlpathfilename[256],//文件名
/*out */MSXML::IXMLDOMNodeList **pchildListdata)
{
*pchildListdata=NULL; CoInitialize(NULL);
MSXML::IXMLDOMDocumentPtr pDocdata;
HRESULT hrdata =pDocdata.CreateInstance(__uuidof(MSXML::DOMDocument));
if(SUCCEEDED(hrdata))
{
pDocdata->load(cxmlpathfilename);
MSXML::IXMLDOMElementPtr pDocElementdata=pDocdata->GetdocumentElement();
//DATA
MSXML::IXMLDOMElementPtr pElementdata=pDocElementdata->selectSingleNode("DATA");
//获得子节点列表
pElementdata->get_childNodes(pchildListdata);
}
CoUninitialize();
return;
}//函数创建新XML文件,并将LoadXMLAndBackNodeList读入的节点列表加入到新文件
void createNewXMLfile()
{
CString cstemp="";
CoInitialize(NULL); //初始化COM 环境
MSXML::IXMLDOMDocumentPtr pDoc;
HRESULT hr =pDoc.CreateInstance(__uuidof(MSXML::DOMDocument));
if(!SUCCEEDED(hr)) return; //创建下面行
//<?xml version="1.0" encoding="UTF-8" ?>
try
{
MSXML::IXMLDOMProcessingInstructionPtr pPI = NULL;
cstemp.Format("version='%s' encoding='%s'","1.0","UTF-8");
pPI=pDoc->createProcessingInstruction((_bstr_t)"xml", (_bstr_t)cstemp);
pDoc->appendChild(pPI);
}
catch (_com_error e)
{
} //0-根 SCL
MSXML::IXMLDOMElementPtr pDocElement=pDoc->createElement("SCL");
pDoc->appendChild(pDocElement); //将LoadXMLAndBackNodeList读入的节点列表加入到新文件 MSXML::IXMLDOMNodeList *pchildListdata;
LoadXMLAndBackNodeList("c:\\data.xml",&pchildListdata);
if(pchildListdata != NULL)
{
//获得子节点的个数
long ilen=0;
pchildListdata->get_length(&ilen);
MSXML::IXMLDOMNode *pchildNodedata; for(long i=0;i<ilen;i++)
{
//获得0节点并取名字
pchildNodedata=NULL;
pchildListdata->get_item(i,&pchildNodedata); pDocElement->appendChild(pchildNodedata);
}
}
pDoc->save("c:\\new.xml");
CoUninitialize();
return;
}//原data.xml文件
<base>
<DATA>
<DOType cdc="INC" id="INC">
</DOType>
<DOType cdc="INS" id="INS">
</DOType>
<DOType cdc="LPL" id="LPL">
</DOType>
<DOType cdc="DPL" id="DPL">
</DOType>
<DOType cdc="SPS" id="SPS">
</DOType>
<DOType cdc="MV" id="MV">
</DOType>
<DOType cdc="CMV" id="CMV">
</DOType>
</DATA>
</base>
//想生成的文件new.xml
<SCL>
<DOType cdc="INC" id="INC">
</DOType>
<DOType cdc="INS" id="INS">
</DOType>
<DOType cdc="LPL" id="LPL">
</DOType>
<DOType cdc="DPL" id="DPL">
</DOType>
<DOType cdc="SPS" id="SPS">
</DOType>
<DOType cdc="MV" id="MV">
</DOType>
<DOType cdc="CMV" id="CMV">
</DOType>
</SCL>
改为
pchildListdata->raw_nextNode(&pchildNodedata);