除了xml中的属性值外,还获取属性名称

时间:2009-01-06 15:30:32

标签: c# xml

我正在接收动态xml,我不知道属性名称,如果你看看xml和代码......我试着做一个简单的例子,我可以得到属性值,即“myName”, “myNextAttribute”和“blah”,但我无法获取属性名称,即“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 个答案:

答案 0 :(得分:25)

您可以在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();
}

答案 1 :(得分:0)

您的切换是不必要的,因为您只有一个案例,请尝试将其转换为您的if语句。

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

请注意&amp;&amp;运算符按顺序求值,因此如果xr.NoteType为false,则忽略其余参数并跳过if块。