Я получаю динамический xml, где я не буду знать имена атрибутов, если вы посмотрите на xml и код ... Я попытался сделать простой пример, я могу получить значения атрибутов, то есть "myName", "myNextAttribute" , и «бла», но я не могу получить имена атрибутов, например «name», «nextAttribute» и «etc1». Любые идеи, я полагаю, это должно быть что-то легкое, что мне не хватает ... но я уверен, что это не хватает.
static void Main(string[] args)
{
string xml = "<test name=\"myName\" nextAttribute=\"myNextAttribute\" etc1=\"blah\"/>";
TextReader sr = new StringReader(xml);
using (XmlReader xr = XmlReader.Create(sr))
{
while (xr.Read())
{
switch (xr.NodeType)
{
case XmlNodeType.Element:
if (xr.HasAttributes)
{
for (int i = 0; i < xr.AttributeCount; i++)
{
System.Windows.Forms.MessageBox.Show(xr.GetAttribute(i));
}
}
break;
default:
break;
}
}
}
}





Вы можете увидеть в MSDN:
if (reader.HasAttributes) {
Console.WriteLine("Attributes of <" + reader.Name + ">");
while (reader.MoveToNextAttribute()) {
Console.WriteLine(" {0} = {1}", reader.Name, reader.Value);
}
// Move the reader back to the element node.
reader.MoveToElement();
}
В вашем переключателе нет необходимости, поскольку у вас есть только один случай, попробуйте вместо этого включить его в свой оператор if.
if (xr.NodeType && xr.HasAttributes)
{
...
}
Обратите внимание, что оператор && вычисляется по порядку, поэтому, если xr.NoteType имеет значение false, остальные аргументы игнорируются, а блок if пропускается.
В этом примере да, у меня больше случаев в сценарии «реального мира», я просто пытался сохранить его в чистоте. Спасибо хоть.
Спасибо, я подумал, что это должно быть что-то близкое ... также я обнаружил в своем исходном цикле for, я мог бы сделать xr.MoveToAttribute (i) и получить тот же эффект.