xml怎样根据某个属性定位到某个子节点并获取父节点和兄弟节点

csdnxhb1 2011-01-04 07:44:17
有如下xml文件,想根据itemid值如112定位到节点
<MenuItem><text>领导班子</text><url>#</url><itemid>112</itemid></menuitem>
并返回他的父节点的Text值和他兄弟节点的Text值
<Menus>
<Text>新闻</Text>
<Url>list.aspx?type=31</Url>
<ItemID>11</ItemID>
</MenuItem>
<MenuItem>
<Text>政务公开</Text>
<ItemID>12</ItemID>
<SubMenu>
<MenuItem>
<Text>领导班子</Text>
<Url>#</Url>
<ItemID>112</ItemID>
</MenuItem>
<MenuItem>
<Text>机构设置</Text>
<Url>#</Url>
<ItemID></ItemID>
</MenuItem>
<MenuItem>
<Text>政务制度</Text>
<Url>#</Url>
<ItemID></ItemID>
</MenuItem>
</SubMenu>
</MenuItem>
</Menus>
...全文
1195 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hinada99 2011-01-04
  • 打赏
  • 举报
回复
//返回兄弟节点
private void button1_Click(object sender, EventArgs e)
{

string str = "<Menus><MenuItem><Text>新闻</Text><Url>list.aspx?type=31</Url><ItemID>11</ItemID></MenuItem>" +
"<MenuItem><Text>政务公开</Text><ItemID>12</ItemID><SubMenu><MenuItem><Text>领导班子</Text><Url>#</Url>" +
"<ItemID>112</ItemID></MenuItem><MenuItem><Text>机构设置</Text><Url>#</Url><ItemID></ItemID></MenuItem><MenuItem>" +
"<Text>政务制度</Text><Url>#</Url><ItemID></ItemID></MenuItem></SubMenu></MenuItem></Menus>";

//从给定的字符串生成xml文档 xele
XElement xele = XElement.Parse(str);

//先确定<ItemID>112</ItemID>的父节点
var subX = from x in xele.Descendants("MenuItem")
where x.Element("ItemID").Value.Equals("112")
select x;

richTextBox2.Text =richTextBox2.Text+"<ItemID>112</ItemID>的兄弟节点是:\n";
//遍历父节点的所有子节点,返回不是<ItemID>112</ItemID>的所有子节点
foreach (var u in subX.Descendants())
{
if(u.ToString()!="<ItemID>112</ItemID>")
richTextBox2.Text = richTextBox2.Text + u.ToString() + "\n";
}

}
//效果如下
hinada99 2011-01-04
  • 打赏
  • 举报
回复
hinada99 2011-01-04
  • 打赏
  • 举报
回复
(1)取出符合条件的MenuItem
//提取xml中具有指定特征的元素
private void button1_Click(object sender, EventArgs e)
{

string str = "<Menus><MenuItem><Text>新闻</Text><Url>list.aspx?type=31</Url><ItemID>11</ItemID></MenuItem>" +
"<MenuItem><Text>政务公开</Text><ItemID>12</ItemID><SubMenu><MenuItem><Text>领导班子</Text><Url>#</Url>" +
"<ItemID>112</ItemID></MenuItem><MenuItem><Text>机构设置</Text><Url>#</Url><ItemID></ItemID></MenuItem><MenuItem>" +
"<Text>政务制度</Text><Url>#</Url><ItemID></ItemID></MenuItem></SubMenu></MenuItem></Menus>";

//从给定的字符串生成xml文档 xele
XElement xele = XElement.Parse(str);

var subX = from x in xele.Descendants("MenuItem") //找出若干 MenuItem
where x.Element("ItemID").Value.Equals("112") //这些MenuItem的("ItemID")元素的值必须是112
select x; //选出这样的MenuItem, 放入集合subX
foreach (var j in subX) //subX中的每个MenuItem
{
richTextBox2.Text = richTextBox2.Text + j.ToString()+","; //输出到richTextBox2中,之间用逗号隔开
}

}

//效果如下
孟子E章 2011-01-04
  • 打赏
  • 举报
回复
XmlNode x =doc.SelectSingleNode("/Menus/MenuItem[ItemID='123']");
兄弟节点
x.NextSibling
x.PreviousSibling

http://msdn.microsoft.com/zh-cn/library/system.xml.xmlnode_properties.aspx
wuyq11 2011-01-04
  • 打赏
  • 举报
回复
XElement xmlPage = XElement.Parse(xml);
var query = xmlPage.Descendants("Menus").Where(x=>x.Element("ItemID").Value.Equals("112"));
select (string)x.Parent.Element("");
query.Element("").Value;

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧