我已经得到了根节点
我想用C++得到每个instacne的所有节点的属性。希望能给出C++的例子。谢谢!!!
<?xml version="1.0"?> <instances>
<instance Name="Family1">
<symbol symbolId="138896"/>
<transform>
<Origin X="-10.3371471314108" Y="14.0983549530859" Z="1.18091569184673E-17"/>
<Basises>
<Basis0 Item0="-1" Item1="3.23887764179924E-15" Item2="0"/>
<Basis1 Item0="-3.23887764179924E-15" Item1="-1" Item2="0"/>
<Basis2 Item0="0" Item1="0" Item2="1"/>
</Basises>
</transform>
</instance> <instance Name="Family1">
<symbol symbolId="138896"/>
<transform>
<Origin X="-19.8371471314108" Y="14.0983549530859" Z="1.18091569184673E-17"/>
<Basises>
<Basis0 Item0="-1" Item1="3.23887764179924E-15" Item2="0"/>
<Basis1 Item0="-3.23887764179924E-15" Item1="-1" Item2="0"/>
<Basis2 Item0="0" Item1="0" Item2="1"/>
</Basises>
</transform>
</instance>
<instances>
我想用C++得到每个instacne的所有节点的属性。希望能给出C++的例子。谢谢!!!
<?xml version="1.0"?> <instances>
<instance Name="Family1">
<symbol symbolId="138896"/>
<transform>
<Origin X="-10.3371471314108" Y="14.0983549530859" Z="1.18091569184673E-17"/>
<Basises>
<Basis0 Item0="-1" Item1="3.23887764179924E-15" Item2="0"/>
<Basis1 Item0="-3.23887764179924E-15" Item1="-1" Item2="0"/>
<Basis2 Item0="0" Item1="0" Item2="1"/>
</Basises>
</transform>
</instance> <instance Name="Family1">
<symbol symbolId="138896"/>
<transform>
<Origin X="-19.8371471314108" Y="14.0983549530859" Z="1.18091569184673E-17"/>
<Basises>
<Basis0 Item0="-1" Item1="3.23887764179924E-15" Item2="0"/>
<Basis1 Item0="-3.23887764179924E-15" Item1="-1" Item2="0"/>
<Basis2 Item0="0" Item1="0" Item2="1"/>
</Basises>
</transform>
</instance>
<instances>
解决方案 »
- 怎么让运行的对话框在工具栏下有显示?
- 生成release版本遇到的问题(DEBUG版本是正常的)
- Win 服务程序和一个 Win32 程序通讯,什么方式比较好?
- 你们谁见过这种问题?
- 请问如何用全局钩子钩本地所有进程的createprocess()和exitprocess?
- [求助]如何让两个按钮控件都保持按下状态!
- 创建窗口的时候用了WS_HSCROLL,怎么动态去掉滚动条
- 想自己写个安装程序,请给些建议。
- 我在VC下用了SkinLoad进行界面优化,我的程序中有定时器,每40ms刷新一次,执行了200多次后,程序报了Access Violation
- 怎样修改VC SDI App 主框架左上角的default icon?
- 数据库指针问题请教?谢谢
- 自己建立了一个scoket类,监听时accept为什么没有阻塞
<Root>
<Article id="1" sort="news">WuHan</Article>
<Article id="2" sort="news">上海</Article>
</Root>
可以读出属性id,sort和节点内容
注意:不是读取单个节点,是所有的节点,结果保存到数组或直接AfxMessageBox();
我找了一下发现网上的文章都是针对单个节点用
MSXML::IXMLDOMNodePtr pRootNode=pCommandDoc->selectSingleNode("root/record");读取
IXMLDOMDocumentPtr pXmlDoc;
IXMLDOMNodeListPtr NodeListPtr;
MSXML::IXMLDOMNode *DOMNode = NULL;
CString strContest;
//省略load
try
{
NodeListPtr = pXmlDoc->getElementsByTagName("Article");
for(int i=0; i<NodeListPtr->length; i++)
{
NodeListPtr->get_item(i,&DOMNode);
strContest = (LPCSTR)DOMNode->text;
AfxMessageBox(strContest);
}
}
catch(_com_error &err)
{
CString strErr = (LPCTSTR)err.Description();
AfxMessageBox(strErr);
} 怎麼样把我下面的xml格式的文件里面的结点中值循环读出来
<?xml version="1.0" standalone="yes"?>
<InOutStore xmlns="http://tempuri.org/InOutStore.xsd">
<OutStore>
<code>6900916200010</code>
<time>2005-7-11 20:47:54</time>
</OutStore>
<OutStore>
<code>1P25-68596-01</code>
<time>2005-7-11 20:48:10</time>
</OutStore>
<OutStore>
<code>6901028337168</code>
<time>2005-7-11 20:48:20</time>
</OutStore>
<OutStore>
<code>6901028337168</code>
<time>2005-7-11 20:48:32</time>
</OutStore>
<OutStore>
<code>6901028337168</code>
<time>2005-7-11 20:48:41</time>
</OutStore>
<PocketId>
<pid>001</pid>
</PocketId>
</InOutStore>
用 节点[索引]的模式可以读取重名节点, 下面是代码
#if !defined(__MSXML3__)
#define __MSXML3__
#import "msxml3.dll"
using namespace MSXML2;
#endif
IXMLDOMDocument2Ptr xml;
xml.CreateInstance(__uuidof(MSXML2::DOMDocument));
xml->load("xxxx.xml");
CStringArray timeA, codeA;
int i= 1;
BOOL bNode = TRUE;
while (bNode)
{
IXMLDOMNodePtr node;
CString strRoot;
strRoot.Format("/InOutStore/OutStore[%d]", i++);
node=xml->selectSingleNode(_bstr_t(strRoot));
if (node)
{
IXMLDOMNodePtr nodeCode, nodeTime;
VARIANT value;
CString strCode = strRoot + "/code";
nodeCode=xml->selectSingleNode(_bstr_t(strCode));
nodeCode->get_nodeTypedValue(&value);
CString str1(value.bstrVal);
SysFreeString(value.bstrVal);
codeA.Add(str1);
CString strTime = strRoot + "/time";
nodeTime=xml->selectSingleNode(_bstr_t(strTime ));
nodeTime->get_nodeTypedValue(&value);
CString str2(value.bstrVal);
SysFreeString(value.bstrVal);
timeA.Add(str2);
}
else
bNode = FALSE;
}