xml解析

使用msxml4.dll 解析xml

#import "E:\2015-12-24\xml\msxml4.dll"  //msxml4.dll路径





class InitializeCom
{
public:
InitializeCom() {
CoInitialize(NULL); // Initializes the COM library  
}
~InitializeCom() {
CoUninitialize(); // Closes the COM library 
}


}InitCom;

{
CoInitialize(NULL);  //  COM对象初始化!
char *szXmlFile = "E:\\2015-12-24\\MFC_xml\\test.xml"; // xml文件  
MSXML2::IXMLDOMDocumentPtr pDoc = NULL; // xml文档   
MSXML2::IXMLDOMNodePtr pNode = NULL, pChildNode = NULL,pNameNode=NULL,pValueNode=NULL; // 节点  
MSXML2::IXMLDOMNodeListPtr pNodeList = NULL; // 节点链表
MSXML2::IXMLDOMElementPtr pRootElement = NULL, pElement = NULL; // 根节点(元素)
MSXML2::IXMLDOMNamedNodeMapPtr pAttrMap = NULL;  //Getattributes返回值【该dll中将节点属性也作为节点来处理,如<Field name="name3" value=""/>当你获取field节点后,则
                                                                其那么属性和value属性也将作为两个节点来获取,可用getnodename和getnodevalue分别得到其名字和值】
long lChilds, lAttr, i;
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); //使用DOMDocument40来创建实例
if (FAILED(hr))
{

}


VARIANT_BOOL vb = pDoc->load(szXmlFile);      //加载已存在的xml文档  也可直接先将xml数据保存在BSTR中,然后直接加载_bstr_t即可
if (vb == VARIANT_FALSE)
{


}
if (pNode == NULL)
{


}
pRootElement = pDoc->GetfirstChild();    //得到第一个节点   
pNodeList = pDoc->getElementsByTagName((_bstr_t)(char*)"Field");   //通过名称查找节点  查找所有名称为 field 的节点,并将其所有子节点保存在pnodelist中
lChilds = pNodeList->Getlength();    // 得到pnodelist长度,名称为field的节点个数
for (i = 0; i < lChilds; i++)   //遍历
{
BSTR nameGet=0,valueGet=0;
_variant_t nameValue=0,valueValue=0;
CString Name = 0,Value=0;
pChildNode = pNodeList->Getitem(i); //通过index获取field节点
pAttrMap = pChildNode->Getattributes();  //得到该节点属性并保存在IXMLDOMNamedNodeMapPtr中
lAttr = pAttrMap->Getlenth();  //得到属性个数
pNameNode = pAttrMap->Getitem(0);  //通过index得到属性
nameGet = pNameNode->GetnodeName(); // 得到该属性名称   -> name
nameValue = pNameNode->GetnodeValue();//得到该属性值    ->saleno
pValueNode = pAttrMap->Getitem(1);                        
valueGet = pValueNode->GetnodeName();        //          ->    value
valueValue = pValueNode->GetnodeValue();     //           ->   15120703200110000152
Name = (LPCSTR)_bstr_t(nameValue);     //BSTR转为CString
Value = (LPCSTR)_bstr_t(valueValue);
SysFreeString(nameGet);  //释放BSTR指针
SysFreeString(valueGet);
}


CoUninitialize();    //关闭com对象
}


//----------------------------------------xml文档


<SOAP-ENV:Body xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><fjs1:GetsalenoLimitResponse xmlns:fjs1="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay"><fjs1:response><Response>
  <Execution>
    <Status code="100" sqlcode="100" description="无此笔资料,或任何上下笔资料,或其他相关主档资料 !"/>
  </Execution>
  <ResponseContent>
    <Parameter/>
    <Document>
      <RecordSet id="1">
        <Master name="tc_doa_file">
          <Record>
            <Field name="saleno" value="15120703200110000152"/>
            <Field name="saleamount" value="29.800000"/>
            <Field name="invoice" value="29.800000"/>
            <Field name="salenum1" value="1"/>
            <Field name="item1" value="020916115506"/>
            <Field name="name1" value="forza milan"/>
            <Field name="qrty1" value="1.000"/>
            <Field name="mount1" value="29.800000"/>
            <Field name="salenum2" value=""/>
            <Field name="item2" value=""/>
            <Field name="name2" value=""/>
            <Field name="qrty2" value=""/>
            <Field name="mount2" value=""/>
            <Field name="salenum3" value=""/>
            <Field name="item3" value=""/>
            <Field name="name3" value=""/>
            <Field name="qrty3" value=""/>
            <Field name="mount3" value=""/>
          </Record>
        </Master>
      </RecordSet>
    </Document>
  </ResponseContent>
</Response></fjs1:response></fjs1:GetsalenoLimitResponse></SOAP-ENV:Body>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值