3,055
社区成员
发帖
与我相关
我的任务
分享
<简化城市信息>
<城市>
北京
<经度> 116 </经度>
<纬度> 40 </纬度>
<城市名称>
沈阳 <编号> G1 </编号> <里程> 661 </里程>
</城市名称>
<城市名称>
天津 <编号> G2 </编号> <里程> 92 </里程>
</城市名称>
<城市名称>
石家庄 <编号> G4 </编号> <里程> 268 </里程>
</城市名称>
<城市名称>
呼和浩特 <编号> G6 </编号> <里程> 478 </里程>
</城市名称>
</城市>
<城市>
上海
<经度> 121 </经度>
<纬度> 31 </纬度>
<城市名称>
济南 <编号> G2 </编号> <里程> 806 </里程>
</城市名称>
<城市名称>
南京 <编号> G42 </编号> <里程> 337 </里程>
</城市名称>
<城市名称>
武汉 <编号> G50 </编号> <里程> 908 </里程>
</城市名称>
<城市名称>
杭州 <编号> G60 </编号> <里程> 165</里程>
</城市名称>
</城市>
<城市>
<简化城市信息>
struct citymessage
{
string name;
int x;
int y;
CString direct[10];
CString directnum[10];
int distance[10];
}city[33];
void ReadXml()
{
MSXML2::IXMLDOMDocumentPtr pDoc;
::CoInitialize(NULL);
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
if (!SUCCEEDED(hr))
{
MessageBox(_T("创建DOMDocument对象失败。\n请检查运行环境"), _T("错误"), MB_ICONERROR);
return;
}
pDoc->load("城市信息(简).xml");
/*
pDoc->put_async(VARIANT_FALSE);
VARIANT_BOOL bhr = pDoc->load((_variant_t)strXmlPath);
if (bhr != VARIANT_TRUE) {
MessageBox(_T("无法正确读取xml文件"), _T("错误"), MB_ICONERROR);
return;
}
*/
MSXML2::IXMLDOMElementPtr root = pDoc->documentElement;
// 取得根节点的名字
_variant_t strRootName = root->nodeName;
_bstr_t wstrRootName(strRootName.bstrVal);
MSXML2::IXMLDOMNodeListPtr cityList = root->GetchildNodes(); //cases,即为每个子节点也就是32个省会城市
// 解析cases的子节点,读取32个城市的信息
int ilength = cityList->Getlength(); //ilength子节点个数,本程序中也可以设定为32
for (nodeCount = 0; nodeCount < ilength; nodeCount++)
{
MSXML2::IXMLDOMNodePtr citymessage = cityList->nextNode();
_variant_t CityName = citymessage->GetnodeName();
_variant_t CityValue = citymessage->GetnodeValue();
city[nodeCount].name = (char*)(_bstr_t)citymessage->text; //读取第nodeCount个城市的名称
//开始读取其经纬度和高速连通信息
ReadCity(citymessage->GetchildNodes());
}
}
void ReadCity(MSXML2::IXMLDOMNodeListPtr nodeList)
{
CString messagex, messagey,messagename;
int messagelength = nodeList->Getlength();
for (messageCount = 0; messageCount < messagelength; messageCount++)
{
MSXML2::IXMLDOMNodePtr messagenode = nodeList->nextNode();
_variant_t messagenodeName = messagenode->GetnodeName();
_variant_t messagenodeeValue = messagenode->Gettext();
BSTR bStrTemp = messagenodeName.bstrVal;
CString strTemp = CString(bStrTemp);
SysFreeString(bStrTemp);
CString strNodeName = strTemp;
if (0 == strNodeName.CompareNoCase(_T("经度")))
{
messagex = (BSTR)messagenodeName.pbstrVal;
}
if (0 == strNodeName.CompareNoCase(_T("纬度")))
{
messagey = (BSTR)messagenodeName.pbstrVal;
}
if (0 == strNodeName.CompareNoCase(_T("城市名称")))
{
messagename = (BSTR)messagenodeName.pbstrVal;
ReadLoad(messagenode->GetchildNodes());
}
city[nodeCount].x = _ttoi(messagex);
city[nodeCount].y = _ttoi(messagey);
city[nodeCount].direct[messageCount - 2] = messagename;
}
}
void ReadLoad(MSXML2::IXMLDOMNodeListPtr nodeList)
{
CString loadistance;
int loadlength = nodeList->Getlength();
for (int loadnum = 0; loadnum < loadlength; loadnum++)
{
MSXML2::IXMLDOMNodePtr loadnode = nodeList->nextNode();
_variant_t loadnodeName = loadnode->GetnodeName();
_variant_t loadnodeValue = loadnode->Gettext();
BSTR bStrTemp = loadnodeName.bstrVal;
CString strTemp = CString(bStrTemp);
SysFreeString(bStrTemp);
CString strNodeName = strTemp;
if (0 == strNodeName.CompareNoCase(_T("编号")))
{
city[nodeCount].directnum[messageCount - 2] = (BSTR)loadnodeName.pbstrVal;
}
if (0 == strNodeName.CompareNoCase(_T("里程")))
{
loadistance = (BSTR)loadnodeName.pbstrVal;
}
city[nodeCount].distance[messageCount - 2] = _ttoi(loadistance);
}
}