这是我的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;
}
请有人帮帮我。
答案 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中都区分大小写。