XML遍历和编码问题
有如下xml文件(片段)
<dblp>
<mastersthesis mdate="2002-01-03" key="ms/Brown92">
<author>Kurt P. Brown</author>
<title>PRPL: A Database Workload Specification Language, v1.3.</title>
<year>1992</year>
<school>Univ. of Wisconsin-Madison</school>
</mastersthesis>
<mastersthesis mdate="2002-01-03" key="ms/Yurek97">
<author>Tolga Yurek</author>
<title>Efficient View Maintenance at Data Warehouses.</title>
<year>1997</year>
<school>University of California at Santa Barbara</school>
</mastersthesis>
</dblp>
现在想要把其中的每个元素进行编码,如
dblp:0
masterthesis: 0.0
author: 0.0.0
title: 0.0.1
year: 0.0.2
...
不知道对于这种编码应该怎样存储?
我的想法是:遍历整个DOM树(VC+MSXML+DOM),为每个非叶子节点添加一个ID属性存储其ID,遍历算法大致如下:
void traverse(IXMLDOMElementPtr pe, string ID){
if (pe->hasChildNodes())
addIDAttribute(pe, ID);
IXMLDOMNodeListPtr pNodeList = pn->childNodes;
if (pNodeList)
for(int i=0; i<pNodeList->length; i++)
traverse(pNodeList->item[i]);
}
问题如下:
1。addIDAttribute应当如何写?
2。traverse的第一个参数类型能否用IXMLDOMNodePtr?I
问题点数:50、回复次数:6Top
1 楼ytdmm(相忘于江湖)回复于 2005-03-14 15:41:41 得分 0
3。IXMLDOMNode和IXMLDOMElement有什么区别?Top
2 楼ssm1226(雨中人(虚心学习))回复于 2005-03-14 16:05:59 得分 2
对c不熟,试试setAttribute
http://msdn.microsoft.com/library/en-us/xmlsdk/html/xmmthsetAttribute.asp?frame=trueTop
3 楼fcuandy(了此残生.)回复于 2005-03-14 16:16:14 得分 2
做遍历很简单,但不懂vcTop
4 楼ytdmm(相忘于江湖)回复于 2005-03-14 16:30:18 得分 0
谢谢大家回复~~
to:ssm1226(雨中人)
setAttribute是IXMLDOMElement的method,但不是IXMLDOMNode的method呀!能否给一个Node添加attribute呢?
但是如果用IXMLDOMElement遍历,遇到叶子节点时,在if (pe->hasChildNodes())这一句总是过不去。Top
5 楼voljinsmm()回复于 2005-03-16 22:14:06 得分 46
1.
//IXMLDOMNodePtr pn;
if (pn->hasChildNodes()) //add ID as a new attribute
{
IXMLDOMElementPtr pe = pn;
IXMLDOMAttributePtr pa = pXMLDom->createAttribute("ID");
pa->value = _bstr_t(ID);
pe->setAttributeNode(pa);
}
2.traverse的参数必须用IXMLDOMNodePtr, 不能用IXMLDOMElementPtr
3.Element是Node的一种, ...Ptr则是指向它们的指针
Top
6 楼ytdmm(相忘于江湖)回复于 2005-03-17 09:10:03 得分 0
回答的太到位了。结贴!Top




