当前位置:编程学习 > C#/ASP.NET >>

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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,