下面的两个函数都是根据 名称(name)返回节点的值
1是调用 IXMLNode 的方法_node->ChildValues[name];
2是调用 取出node 的所有节点然后循环对比名称(name),再返回节点的值现在的情况是相同的名称(name)调用1没有取到值,调用2能取到。
不知道是什么原因?请高手解答。谢谢_di_IXMLNode _node;
1 -----------------------------
AnsiString child_value(AnsiString name)const //返回子节点的值。
{
if(_node == NULL)return AnsiString();
AnsiString S;
try
{
OleVariant v = _node->ChildValues[name];
if(v.IsNull())S = AnsiString();
else S = AnsiString(v);
}
catch(...){ S = AnsiString();}
return S;
}
2 -----------------------------------------------------------------------
AnsiString child_value_new(AnsiString name)const //返回子节点的值。
{
if(_node == NULL)return "";
AnsiString S;
_di_IXMLNodeList List = _node->ChildNodes;
for(int i=0;i<List->Count;i++)
{
if( List->Nodes[i]->NodeName == name )
{
try
{
OleVariant v = List->Nodes[i]->Text;
if(v.IsNull())S = AnsiString();
else S = AnsiString(v);
}
catch(...){ S = AnsiString();}
return S;
}
}
return "";
}
1是调用 IXMLNode 的方法_node->ChildValues[name];
2是调用 取出node 的所有节点然后循环对比名称(name),再返回节点的值现在的情况是相同的名称(name)调用1没有取到值,调用2能取到。
不知道是什么原因?请高手解答。谢谢_di_IXMLNode _node;
1 -----------------------------
AnsiString child_value(AnsiString name)const //返回子节点的值。
{
if(_node == NULL)return AnsiString();
AnsiString S;
try
{
OleVariant v = _node->ChildValues[name];
if(v.IsNull())S = AnsiString();
else S = AnsiString(v);
}
catch(...){ S = AnsiString();}
return S;
}
2 -----------------------------------------------------------------------
AnsiString child_value_new(AnsiString name)const //返回子节点的值。
{
if(_node == NULL)return "";
AnsiString S;
_di_IXMLNodeList List = _node->ChildNodes;
for(int i=0;i<List->Count;i++)
{
if( List->Nodes[i]->NodeName == name )
{
try
{
OleVariant v = List->Nodes[i]->Text;
if(v.IsNull())S = AnsiString();
else S = AnsiString(v);
}
catch(...){ S = AnsiString();}
return S;
}
}
return "";
}
解决方案 »
- 很奇怪的问题 GetExitCodeThread 确定线程已经退出 线程还没实际退出 会出现内存泄露
- 帮忙解决一下为什么编译错误
- 关于IOP中的问一个关于WSAsend的问题
- 请问,如何在任务栏上隐藏对话框?
- 请教:关于XML
- 帮忙 “Run-Time Check Failure #2 - Stack around the variable 'bmpinfo' was corrupted.”
- 现在的免驱动的摄像头怎样转成rgb24
- VC程序为何挑三捡四,各位一定要看啊!
- 有关CDaoRecordView类中的UpdateData()函数
- 关于API的简单问题
- vs2005中开发com+组件
- 怎样在基于对话框的程序里获取主对话框?
{
if(_node == NULL)return "";
AnsiString S;
_di_IXMLNodeList List = _node->ChildNodes;
try
{
OleVariant v = List->Nodes[WideString(name)]->Text;
if(v.IsNull())S = AnsiString();
else S = AnsiString(v);
}
catch(...){ S = AnsiString();}
return S;
return "";
}
源文件如下:<?xml version="1.0" encoding="UTF-8"?>
<xbrl xmlns="http://www.xbrl.org/2003/instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:iso4217="http://www.xbrl.org/2003/iso4217" xmlns:clcid-ar="http://www.xbrl-cn.org/cn/lcid/rpt/ar/2005-12-31" xmlns:clcid-cgi="http://www.xbrl-cn.org/cn/lcid/rpt/cgi/2005-12-31" xmlns:clcid-common="http://www.xbrl-cn.org/cn/lcid/rpt/common/2005-12-31" xmlns:clcid-ie="http://www.xbrl-cn.org/cn/lcid/rpt/ie/2005-12-31" xmlns:clcid-mr="http://www.xbrl-cn.org/cn/lcid/rpt/mr/2005-12-31" xmlns:clcid-pte="http://www.xbrl-cn.org/cn/lcid/common/pte/2005-12-31" xmlns:xbrl="http://www.xbrl.org/2003/instance" xmlns:clcid-ci-sar="http://www.xbrl-cn.org/cn/lcid/ci/ar/2006-12-31" xsi:schemaLocation="http://www.xbrl-cn.org/cn/lcid/ci/ar/2006-12-31 http://www.xbrl-cn.org/cn/lcid/ci/ar/2006-12-31/clcid-ci-ar-2006-12-31.xsd">
<clcid-cgi:BaoGaoQiMoGuDongZongShu contextRef="C_instant_20061231" decimals="0" unitRef="U_pure">42623</clcid-cgi:BaoGaoQiMoGuDongZongShu>
</xbrl>
XML元素命名必须遵守下面的规则:元素的名字可以包含子母,数字和其他字符。
元素的名字不能以数字或者标点符号开头。
元素的名字不能以XML(或者xml,Xml,xMl...)开头。
元素的名字不能包含空格。
自己“发明”的XML元素还必须注意下面一些简单的规则:任何的名字都可以使用,没有保留字(除了XML),但是应该使元素的名字具有可读性,名字使用下划线是一个不错的选择。例如: <first_name>, <last_name>.尽量避免使用“-”,“.”,因为有可能引起混乱。只要你愿意元素的名字可以很长,但也不要太夸张了哦。命名应该遵循简单易读的原则,例如:<book_title>是一个不错的名字,而<the_title_of_the_book>则显得罗嗦了。 XML文档往往都对应着数据表,我们应该尽量让数据库中的字段的命名和相应的XML文档中的命名保持一致,这样可以方便数据变换。非英文/字符/字符串也可以作为XML元素的名字,例如<蓝色理想><经典论坛>这都是完全合法的名字。但是有一些软件不能很好的支持这种命名,所以尽量使用英文字母来命名。在XML元素命名中不要使用":",因为XML命名空间需要用到这个十分特殊的字符。
{
if(_node == NULL)return AnsiString();
AnsiString S;
try
{
OleVariant v = _node->ChildValues[WideString(name)];//try!!!
if(v.IsNull())S = AnsiString();
else S = AnsiString(v);
}
catch(...){ S = AnsiString();}
return S;
}
if(!doc.LoadFile()) return;
TiXmlElement *root=doc.RootElement();
TiXmlElement *node=root->FirstChildElement("clcid-cgi:BaoGaoQiMoGuDongZongShu");
if(node)
{
ShowMessage(node->GetText());
}发现TinyXML真是很爽,非常小,到网上找一下就有
<>>>。
]]>>
谢谢