vc中用mfc读取xml文档 平台:VC6.0或VS2010
xml文档如下(共3层,取中间的值):<?xmlversion="1.0"encoding="utf-8"?>-<root>-<root1>-<node2><childn...
xml文档如下(共3层,取中间的值):
<?xml version="1.0" encoding="utf-8"?>
- <root>
- <root1>
- <node2>
<childnode1 attrib1="value11" attrib2="value21"/>
<childnode2 attrib1="value12" attrib2="value22"/>
<childnode3 attrib1="value13" attrib2="value23"/>
</node2>
</root1>
</root>
我要取的是:中间那三行attrib1和attrib2的值共6个值
PS:1、要源代码,不必传资料,我纠结这个问题有几天了,网上的资料看了很多,但还是不会
2、用MFC对话框,(要能观察到结果)
3、那三行只是我随便举得例子,实际行数未知?
4、不用第三方控件
费心了,谢谢!!
邮箱:1043923268@qq.com 展开
<?xml version="1.0" encoding="utf-8"?>
- <root>
- <root1>
- <node2>
<childnode1 attrib1="value11" attrib2="value21"/>
<childnode2 attrib1="value12" attrib2="value22"/>
<childnode3 attrib1="value13" attrib2="value23"/>
</node2>
</root1>
</root>
我要取的是:中间那三行attrib1和attrib2的值共6个值
PS:1、要源代码,不必传资料,我纠结这个问题有几天了,网上的资料看了很多,但还是不会
2、用MFC对话框,(要能观察到结果)
3、那三行只是我随便举得例子,实际行数未知?
4、不用第三方控件
费心了,谢谢!!
邮箱:1043923268@qq.com 展开
展开全部
程序发到你邮箱了。里面有详细注释
核心代码如下
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle = _T("选择XML文件");
fileDlg.m_ofn.lpstrFilter = _T("Text Files(*.xml)\0*.xml\0All Files(*.*)\0*.*\0\0");
if(IDOK == fileDlg.DoModal())
{
CFile inFile;
inFile.Open(fileDlg.GetPathName(), CFile::modeRead | CFile::typeBinary, NULL);
UINT nFileLen = inFile.GetLength();
char* pBuf = new char[nFileLen + 1];
pBuf[nFileLen] = 0;
inFile.Read(pBuf, nFileLen);
CString strFile = pBuf;
int nIndex;
UpdateData();
m_FilePath = fileDlg.GetPathName();
nIndex = strFile.Find(_T("childnode1"), 0);
m_Edit11 = strFile.Mid(nIndex + 20, 7);
m_Edit21 = strFile.Mid(nIndex + 38, 7);
nIndex = strFile.Find(_T("childnode2"), 0);
m_Edit12 = strFile.Mid(nIndex + 20, 7);
m_Edit22 = strFile.Mid(nIndex + 38, 7);
nIndex = strFile.Find(_T("childnode3"), 0);
m_Edit13 = strFile.Mid(nIndex + 20, 7);
m_Edit23 = strFile.Mid(nIndex + 38, 7);
UpdateData(FALSE);
delete pBuf;
inFile.Close();
}
核心代码如下
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle = _T("选择XML文件");
fileDlg.m_ofn.lpstrFilter = _T("Text Files(*.xml)\0*.xml\0All Files(*.*)\0*.*\0\0");
if(IDOK == fileDlg.DoModal())
{
CFile inFile;
inFile.Open(fileDlg.GetPathName(), CFile::modeRead | CFile::typeBinary, NULL);
UINT nFileLen = inFile.GetLength();
char* pBuf = new char[nFileLen + 1];
pBuf[nFileLen] = 0;
inFile.Read(pBuf, nFileLen);
CString strFile = pBuf;
int nIndex;
UpdateData();
m_FilePath = fileDlg.GetPathName();
nIndex = strFile.Find(_T("childnode1"), 0);
m_Edit11 = strFile.Mid(nIndex + 20, 7);
m_Edit21 = strFile.Mid(nIndex + 38, 7);
nIndex = strFile.Find(_T("childnode2"), 0);
m_Edit12 = strFile.Mid(nIndex + 20, 7);
m_Edit22 = strFile.Mid(nIndex + 38, 7);
nIndex = strFile.Find(_T("childnode3"), 0);
m_Edit13 = strFile.Mid(nIndex + 20, 7);
m_Edit23 = strFile.Mid(nIndex + 38, 7);
UpdateData(FALSE);
delete pBuf;
inFile.Close();
}
追问
刚刚开会,没看到,我晚上回去看一下,谢谢你哦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已发送
不过,我的只有两层,你看着办吧
还有上面一楼的那个,你根本就是文件操作(fileOpen)xml有自己的接口
你要用文件操作的话,如果是下面的格式:
<?xml version="1.0" encoding="utf-8"?>
- <root>
- <root1>
- <node2>
<childnode1 attrib1="value11" attrib2="value21"/>
<childnode2 attrib1="value12" attrib2="value22"/>
<childnode3 attrib1="value13" attrib2="value23"/>
</node2>
- <node4> //这边有变化
<childnode1 attrib1="value11" attrib2="value21"/>
<childnode2 attrib1="value12" attrib2="value22"/>
<childnode3 attrib1="value13" attrib2="value23"/>
</node4>
</root1>
</root>
这种格式你就根本不能读取指定节点,你会12个数据都读出,而不是6个
不过,我的只有两层,你看着办吧
还有上面一楼的那个,你根本就是文件操作(fileOpen)xml有自己的接口
你要用文件操作的话,如果是下面的格式:
<?xml version="1.0" encoding="utf-8"?>
- <root>
- <root1>
- <node2>
<childnode1 attrib1="value11" attrib2="value21"/>
<childnode2 attrib1="value12" attrib2="value22"/>
<childnode3 attrib1="value13" attrib2="value23"/>
</node2>
- <node4> //这边有变化
<childnode1 attrib1="value11" attrib2="value21"/>
<childnode2 attrib1="value12" attrib2="value22"/>
<childnode3 attrib1="value13" attrib2="value23"/>
</node4>
</root1>
</root>
这种格式你就根本不能读取指定节点,你会12个数据都读出,而不是6个
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这样叫核心~~~
你的代码根本不能提前xml文件~~
回答了就耐心的给别人写个完整点的吧。。
你的代码根本不能提前xml文件~~
回答了就耐心的给别人写个完整点的吧。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询