xml怎样根据某个属性定位到某个子节点并获取父节点和兄弟节点
有如下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> --------------------编程问答-------------------- 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;
--------------------编程问答-------------------- XmlNode x =doc.SelectSingleNode("/Menus/MenuItem[ItemID='123']");
兄弟节点
x.NextSibling
x.PreviousSibling
http://msdn.microsoft.com/zh-cn/library/system.xml.xmlnode_properties.aspx --------------------编程问答-------------------- (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中,之间用逗号隔开
}
}
//效果如下
--------------------编程问答-------------------- --------------------编程问答-------------------- //返回兄弟节点
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";
}
}
//效果如下
补充:.NET技术 , C#