从XML获取属性值

时间:2016-11-30 07:28:43

标签: c# xml

这是我的XML字符串。

<?xml version="1.0" encoding="UTF-8"?>
<Menu TextField="Menu" NavigateUrlField="/#" MenuID="74">
   <Menu TextField="Assets" NavigateUrlField="/Assets" MenuID="1870" />
   <Menu TextField="Asset Category" NavigateUrlField="/AssetCategory" MenuID="1871" />
   <Menu TextField="Asset Location" NavigateUrlField="/AssetLocation" MenuID="1872" />
</Menu>

我需要从这个XML中获取TextField和MenuId。仅限于根菜单标记下方的菜单标记。

Text Field               MenuId
-------------------------------
Assets                   1870
Asset Category           1871
Asset Location           1872

我尝试了以下代码但没有工作:

var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);

XmlNodeList elemList = xmlDoc.GetElementsByTagName("Menu");
for (int i = 0; i < elemList.Count; i++)
{
    string menuId = elemList[i].Attributes["MenuID"].Value;
    string textField = elemList[i].Attributes["TextField"].Value;
}

请有人帮帮我。

3 个答案:

答案 0 :(得分:1)

请注意,属性名称“MenuI D ”,而不是“MenuI d

XmlNode root = xmlDoc.DocumentElement;
XmlNodeList elemList = root.SelectNodes("Menu");
for (int i = 0; i < elemList.Count; i++)
{       
    string menuId = elemList[i].Attributes["MenuID"].Value;
    string textField = elemList[i].Attributes["TextField"].Value;
}

答案 1 :(得分:0)

使用xml linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);
            XElement menu = doc.Element("Menu");
            var results = menu.Descendants("Menu").Select(x => new {
                textField = (string)x.Attribute("TextField"),
                menuID = (int)x.Attribute("MenuID")
            }).ToList();
        }
    }
}

答案 2 :(得分:-1)

您可以使用简单的XPath查询在父级别查找Menu,然后选择其下的所有Menu个节点:

XmlNodeList elemList = xmlDoc.SelectNodes("Menu/Menu");

然后还将Attributes["MenuId"].Value更改为Attributes["MenuID"].Value,因为所有名称在XML中都区分大小写。