如何从C#中的XmlNode读取属性值?

假设我得到一个XmlNode,并且我想为attirbute“Name”赋值。 我怎样才能做到这一点??

XmlTextReader reader = new XmlTextReader(path); XmlDocument doc = new XmlDocument(); XmlNode node = doc.ReadNode(reader); foreach (XmlNode chldNode in node.ChildNodes) { **//Read the attribute Name** if (chldNode.Name == Employee) { if (chldNode.HasChildNodes) { foreach (XmlNode item in node.ChildNodes) { } } } } 

XMl文件:

 <Root> <Employee Name ="TestName"> <Childs/> </Root> 

尝试这个:

 string employeeName = chldNode.Attributes["Name"].Value; 

为了扩展Konamiman的解决scheme(包括所有相关的空检查),这就是我一直在做的事情:

 if (node.Attributes != null) { var nameAttribute = node.Attributes["Name"]; if (nameAttribute != null) return nameAttribute.Value; throw new InvalidOperationException("Node 'Name' not found."); } 

您可以像使用节点一样遍历所有属性

 foreach (XmlNode item in node.ChildNodes) { // node stuff... foreach (XmlAttribute att in item.Attributes) { // attribute stuff } } 

如果你所需要的只是名字,用xpath代替。 不需要自己做迭代,并检查null。

 string xml = @" <root> <Employee name=""an"" /> <Employee name=""nobyd"" /> <Employee/> </root> "; var doc = new XmlDocument(); //doc.Load(path); doc.LoadXml(xml); var names = doc.SelectNodes("//Employee/@name"); 

使用

 item.Attributes["Name"].Value; 

获得价值

如果使用chldNode作为XmlElement而不是XmlNode ,那么可以使用

 var attributeValue = chldNode.GetAttribute("Name"); 

如果属性名称不存在,则返回值只是一个空string 。

所以你的循环可能看起来像这样:

 XmlDocument document = new XmlDocument(); var nodes = document.SelectNodes("//Node/N0de/node"); foreach (XmlElement node in nodes) { var attributeValue = node.GetAttribute("Name"); } 

这将select由<Node><N0de></N0de><Node>标签包围的所有节点<node> ,并随后遍历它们并读取属性“Name”。

你也可以用这个;

 string employeeName = chldNode.Attributes().ElementAt(0).Name 

又一个解决scheme:

 string s = "??"; // or whatever if (chldNode.Attributes.Cast<XmlAttribute>() .Select(x => x.Value) .Contains(attributeName)) s = xe.Attributes[attributeName].Value; 

它也避免了预期的属性attributeName实际上不存在的exception。