当前位置:编程学习 > wap >>

求问一个用QXML解析SCD的问题,万分谢谢您。

在解析一个XML中的一段的时候出现了错误,帮忙看下,谢谢了。
这个代码原先是VC6+QT3上面的,我移植到VS2010+QT4下面,XML的前面一部分都能正常解析得到,就在解析下面的片断的时候,跳出那个我标注了的中括号的时候报错误。
XML片断:
						<DOI name="Mod" desc="模式">
<DAI name="stVal"/>
<DAI name="q"/>
<DAI name="t"/>
<DAI name="ctlModel">
<Val>0</Val>
</DAI>
</DOI>


代码片断,就是用来解析那些DAI的。错误处标明了。
	tag = "DAI";
QDomNodeList LN0_NewDAIlist= LN0_DOIlist.item(LN0_DOI_index).toElement().elementsByTagName(tag);
if( LN0_NewDAIlist.length()>0 )
{
if( lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].SDInum==0 )
{
lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].SDInum =LN0_NewDAIlist.length(); 
lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo =(T_61850_SDINFO *)malloc(sizeof(T_61850_SDINFO)*(LN0_NewDAIlist.length()));
if(lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo )
memset( lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo, 0, sizeof(T_61850_SDINFO)*(LN0_NewDAIlist.length()) ); 
}
else if((lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].SDInum>0)&&(lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].SDInum < LN0_NewDAIlist.length()))
{
lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].SDInum =LN0_NewDAIlist.length(); 
lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo =(T_61850_SDINFO *)realloc(lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo,sizeof(T_61850_SDINFO)*(LN0_NewDAIlist.length()));
if(lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo )
memset( lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo, 0, sizeof(T_61850_SDINFO)*(LN0_NewDAIlist.length()) ); 
}

QDomAttr LN0NewDAIname;
QString LN0_NewDAI_name;
QDomAttr LN0NewDAIVal;
QString LN0_NewDAI_Val;

QDomAttr LN0NewDAIsAddr;
QString LN0_NewDAI_sAddr;
for( int LN0_NewDAIindex=0;LN0_NewDAIindex<LN0_NewDAIlist.length() ;LN0_NewDAIindex++)
{
if( LN0_NewDAIlist.item(LN0_NewDAIindex).toElement().hasAttribute("name"))
{
LN0NewDAIname= LN0_NewDAIlist.item(LN0_NewDAIindex).toElement().attributeNode( "name" );
LN0_NewDAI_name = LN0NewDAIname.value();
}
else
LN0_NewDAI_name="";


lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo[LN0_NewDAIindex].SDI_DAInum =1; 
lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo[LN0_NewDAIindex].pDAIInfo =(T_61850_DAIINFO *)malloc(sizeof(T_61850_DAIINFO)*(1));
if(lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo[LN0_NewDAIindex].pDAIInfo )
memset( lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo[LN0_NewDAIindex].pDAIInfo, 0, sizeof(T_61850_DAIINFO)*(1) ); 

strcpy( lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo[LN0_NewDAIindex].pDAIInfo[0].SDI_DAIname,CODEU(LN0_NewDAI_name)); 

if( LN0_NewDAIlist.item(LN0_NewDAIindex).toElement().hasAttribute("sAddr"))
{
LN0NewDAIsAddr= LN0_NewDAIlist.item(LN0_NewDAIindex).toElement().attributeNode( "sAddr" );
LN0_NewDAI_sAddr = LN0NewDAIsAddr.value();
}
else
LN0_NewDAI_sAddr="";
if(LN0_NewDAI_sAddr.length()<=63)
strcpy( lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo[LN0_NewDAIindex].pDAIInfo[0].DAI_sAddr ,CODEU(LN0_NewDAI_sAddr)); 
else
memcpy( lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo[LN0_NewDAIindex].pDAIInfo[0].DAI_sAddr ,CODEU(LN0_NewDAI_sAddr),63); 

tag = "Val";
QDomNodeList LN0_NewDAIVallist = LN0_NewDAIlist.item(LN0_NewDAIindex).toElement().elementsByTagName(tag);
LN0_NewDAI_Val = LN0_NewDAIVallist.item(0).toElement().text(); 
if(LN0_NewDAI_Val.length()<=63)
strcpy( lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo[LN0_NewDAIindex].pDAIInfo[0].DAIvalue,CODEU(LN0_NewDAI_Val));    
else
memcpy( lp_SCLINFO->lp_IDInfo[IEDindex].lp_ServerInfo[Serverindex].pLDInfo[LDindex].pLNInfo[0].pDOdescINFO[LN0_DOI_index].pSDIInfo[LN0_NewDAIindex].pDAIInfo[0].DAIvalue,CODEU(LN0_NewDAI_Val),63); 
//////

}
}//跳这个中括号的时候报错。


错误图片如下:


堆栈空间情况如下:


还有一个问题请教,就是为什么同样的XML,我用XERCES解析比用QT解析慢好多?万分感谢帮忙回答问题的人。 --------------------编程问答--------------------
							<DAI name="ctlModel">
<Val>0</Val>
</DAI>


这个值0是能得到的。 --------------------编程问答-------------------- 其中,
#define CODEU(x) x.toLocal8Bit().data() --------------------编程问答-------------------- 晕,没一个人回啊。哎。
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,