Ответ 1
Попробуйте следующее:
string employeeName = chldNode.Attributes["Name"].Value;
Предположим, что я получил 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 Doc:
<Root>
<Employee Name ="TestName">
<Childs/>
</Root>
Попробуйте следующее:
string employeeName = chldNode.Attributes["Name"].Value;
Чтобы расширить решение Konamiman (включая все соответствующие нулевые проверки), это то, что я делал:
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. Не нужно выполнять итерацию самостоятельно и проверить нулевое значение.
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");
Возвращаемое значение будет пустой строкой, если имя атрибута не существует.
Итак, ваш цикл может выглядеть так:
XmlDocument document = new XmlDocument();
var nodes = document.SelectNodes("//Node/N0de/node");
foreach (XmlElement node in nodes)
{
var attributeValue = node.GetAttribute("Name");
}
Это выберет все узлы <node>
, окруженные тегами <Node><N0de></N0de><Node>
, а затем прокрутит их и прочитает атрибут "Имя".
Еще одно решение:
string s = "??"; // or whatever
if (chldNode.Attributes.Cast<XmlAttribute>()
.Select(x => x.Value)
.Contains(attributeName))
s = xe.Attributes[attributeName].Value;
Он также избегает исключения, когда ожидаемый атрибут attributeName
фактически не существует.
Вы также можете использовать это:
string employeeName = chldNode.Attributes().ElementAt(0).Name