您的位置:首页 > 其它

xml解析

2016-01-18 09:18 232 查看
使用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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: