如何从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。