在xml中,如何获取当前节点下的某个子节点(已知节点名)?

guanxg 2006-10-30 10:53:34
在载入一个xml文件后,我已经定位到某个节点,现在我需要获取当前节点下的某个子节点,该子节点的名字已知。如果通过相对路径定位到它呢?问题是,无法知道父结点的路径。
...全文
743 13 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
guanxg 2006-11-01
  • 打赏
  • 举报
回复
多谢各位了。我找到原因,需要定一个一个名字空间管理类,就是XmlNamespaceManager,然后才能用路径来定位。
liujia_0421 2006-10-30
  • 打赏
  • 举报
回复
给楼主一篇文章参考一下吧,我觉得里面讲得很清楚了:
http://blog.5d.cn/user6/crl/200510/175989.html
有例子...
yuqi508 2006-10-30
  • 打赏
  • 举报
回复
以下参考
private TPFMConfig GetNextConfig()
{
string Ext = "";
string Location = "";
string Subdirectory = "";
string FUnit = "";
string Remove = "";
string Handler = "";
string Destination = "";
string Dir = "";
string ConnectionSting = "";

while (xmlreader.Read())
{
if (xmlreader.NodeType == XmlNodeType.Element)
{
while (xmlreader.Read())
{
if (xmlreader.NodeType == XmlNodeType.Element)
{
if (xmlreader.Name == "EXT")
{
Ext = xmlreader.ReadElementString();
continue;
}
if (xmlreader.Name == "LOCATION")
{
Location = xmlreader.ReadElementString();
continue;
}
if (xmlreader.Name == "SUBDIRECTORY")
{
Subdirectory = xmlreader.ReadElementString();
continue;
}
if (xmlreader.Name == "UNIT")
{
FUnit = xmlreader.ReadElementString();
continue;
}
if (xmlreader.Name == "REMOVE")
{
Remove = xmlreader.ReadElementString();
continue;
}
if (xmlreader.Name == "HANDLER")
{
Handler = xmlreader.ReadElementString();
continue;
}
if (xmlreader.Name == "DESTINATION")
{
Destination = xmlreader.ReadElementString();
continue;
}
if (xmlreader.Name == "DIR")
{
Dir = xmlreader.ReadElementString();
continue;
}
if (xmlreader.Name == "CONNECTIONSTRING")
{
ConnectionSting = xmlreader.ReadElementString();
break;
}
}
}
return new TPFMConfig(Ext, Location, Subdirectory, FUnit, Remove, Handler, Destination, Dir, ConnectionSting);
}
}
return null;
}
supesa 2006-10-30
  • 打赏
  • 举报
回复
建议你看下xmlpath定义
你说的应该可以用
CS3000GR:dataBind[@bindingType="individual"]
做xmlpath来查找
我写的可能不对,好久没写了,都忘了
你看下vs自带的msdn,上边有很规范的讲解的
lovefootball 2006-10-30
  • 打赏
  • 举报
回复
假定node就是ellipse
XmlNode temp = node.SelectSingleNode("CS3000GR:dataBind");

刚才测试了一下
节点名称里面可以带冒号么??
Almzg_0 2006-10-30
  • 打赏
  • 举报
回复
那就是说:CS3000GR:dataBind也是某个节点的值?那这里某个节点你知道么?
guanxg 2006-10-30
  • 打赏
  • 举报
回复
Almzg_0(阿拉麻兹固) ,我知道直接定位某个节点是可以的。但是我碰到的问题是。我需要根据某个子节点的值去找它的兄弟,因为他们之间有些值有联系。
guanxg 2006-10-30
  • 打赏
  • 举报
回复
<ellipse>
<title>"Body"</title>
<CS3000GR:general tagObject="no" debug="yes"/>
<CS3000GR:dataBind bindingType="individual">
<CS3000GR:bindingSet SetNo="1">
<CS3000GR:binding genericName="$TAG" value="RL70519"/>
</CS3000GR:bindingSet>
</CS3000GR:dataBind>
</ellipse>

比如我已经定位到<ellipse>节点了,我如何定位到<CS3000GR:dataBind>这个子节点呢?
Almzg_0 2006-10-30
  • 打赏
  • 举报
回复
<ParserDevType>
<Type name="2000">
<ShowName>2000</ShowName>
<DllPath></DllPath>
</Type>
</ParserDevType>
=======================
XmlNodeList mXmlNodeList = section.SelectNodes("Type");
foreach(XmlNode mXmlNode in mXmlNodeList)
{
mEPDevType = new EPDevType();
mEPDevType.DllPath = mXmlNode.SelectSingleNode("DllPath").InnerText;
mEPDevType.ShowName = mXmlNode.SelectSingleNode("ShowName").InnerText;
if (mXmlNode.Attributes.Count > 0)
{
mEPDevType.DevTypeName = mXmlNode.Attributes[0].InnerText;
mDictionary.Add(mEPDevType.DevTypeName, mEPDevType);
}
}
====================
部分代码,将就着看下
jc15271149 2006-10-30
  • 打赏
  • 举报
回复
childnode
guanxg 2006-10-30
  • 打赏
  • 举报
回复
我已经已经得到父节点了,而且子节点就在父结点的下一级
Almzg_0 2006-10-30
  • 打赏
  • 举报
回复
例子?
Almzg_0 2006-10-30
  • 打赏
  • 举报
回复
无法知道父节点?那怎么找子节点?
相关推荐
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2006-10-30 10:53
社区公告

让您成为最强悍的C#开发者