简体   繁体   English

从XML获取属性值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM