[英]Get attribute values from XML
This is my XML string. 这是我的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>
I need to get the TextField and MenuId from this XML. 我需要从此XML获取TextField和MenuId。 Only from Menu tag that is below root Menu tag.
仅来自根菜单标签下方的菜单标签。
Text Field MenuId
-------------------------------
Assets 1870
Asset Category 1871
Asset Location 1872
I tried below code but not working: 我尝试下面的代码,但不起作用:
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;
}
Please someone help me. 请有人帮我。
Please pay attention, to you attribute name "MenuI D ", not "MenuI d " 请注意,你属性名称“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;
}
Using xml linq : 使用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();
}
}
}
You can use a simple XPath query to find the Menu
at parent level and then select all Menu
nodes below it: 您可以使用简单的XPath查询来找到父级
Menu
,然后选择其下的所有Menu
节点:
XmlNodeList elemList = xmlDoc.SelectNodes("Menu/Menu");
Then also change Attributes["MenuId"].Value
to Attributes["MenuID"].Value
because all names are case sensitive in XML. 然后还将
Attributes["MenuId"].Value
更改为Attributes["MenuID"].Value
因为所有名称在XML中均区分大小写。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.