получить имя атрибута в дополнение к значению атрибута в xml - PullRequest
6 голосов
/ 06 января 2009

Я получаю динамический 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;
                }
            }
        }
    }

Ответы [ 2 ]

25 голосов
/ 06 января 2009

Вы можете увидеть в 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();
}
0 голосов
/ 06 января 2009

Ваш переключатель не нужен, так как у вас есть только один случай, попробуйте вместо этого включить его в свой оператор if.

if (xr.NodeType && xr.HasAttributes)
{
    ...
}

Обратите внимание, что оператор && вычисляет по порядку, поэтому, если xr.NoteType имеет значение false, остальные аргументы игнорируются, а блок if пропускается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...