描述:
如题;
我已做:
1.
#import <msxml.dll> named_guids
using namespace MSXML;
IXMLDOMDocumentPtr m_plDomDocument;
IXMLDOMElementPtr m_pDocRoot;
IXMLDOMNodePtr m_pMod;
IXMLDOMNodePtr pParent;
IXMLDOMNodePtr pChild;
::CoInitialize(NULL);
HRESULT hr = m_plDomDocument.CreateInstance(CLSID_DOMDocument);
if(FAILED(hr))
{
_com_error er(hr);
AfxMessageBox(er.ErrorMessage());
EndDialog(1);
}
CString strFileName("IVR.XML");
_bstr_t bstrFileName;
bstrFileName = strFileName.AllocSysString();
variant_t vResult;
vResult = m_plDomDocument->load(bstrFileName);
if((bool)vResult == TRUE)
{
m_pDocRoot = m_plDomDocument->documentElement;
AfxMessageBox("Document loaded sucessfully!");
}
else
{
AfxMessageBox("Document FAILED to load!");
}
AfxMessageBox(m_plDomDocument->xml);//显示整张xml数据 测试通过......
我写了一个类classA用来保存xml节点属性中的值:
例如 <Offhook_Module ModuleType="47" Module_ID="1" Module_Name="测试" FailTo="0">中所有属性(ModuleType,Module_ID,Module_Name,FailTo)的值保存在ClassA中.问题:
1, xml中,如上语句:Offhook_Module是不是节点?ModuleType是不是属性?"47"是不是值??那么元素又是什么东西??
2, 取得属性值的语句应该怎么写.xml刚刚接触~~
Thanks In Advance~~!
解决方案1:
1.是,是,是。元素是统称。
class A
{
private:
CComBSTR m_bsType;
......
public:
void ReadXMLAttr(IXMLDOMNodePtr pNode)
{
CComPtr<IXMLDOMNamedNodeMap> pAttrMap;
pNode->get_attributes( &pAttrMap );
CComPtr<IXMLDOMNode> pAttr;
pAttrMap->getNamedItem( (BSTR)L"ModuleType", &pAttr );
pAttr->get_text(&m_bsType);
......
}
}
我用CMarkup,很方便,不知楼主是否愿意一试?
用它的话获取属性值就是GetAttrib(_T("ModuleType"))。如果你的xml文件叫做test.xml,放在d盘下:
CMarkup xml;
if(xml.Load("D:\\test.xml")) //加载所要解析的xml文件
{
xml.ResetPos(); //初始化解析点pos
if(xml.FindElem("Offhook_Module"))
{
xml.IntoElem(); //解析点来到Offhook_Module内
CString str = xml.GetAttrib("ModuleType"); //获取属性值
MessageBox(str);
}
}
这就是一个简单的测试。