C# 获取xml中除属性值之外的属性名称

C# 获取xml中除属性值之外的属性名称,c#,xml,C#,Xml,我正在接收动态xml,如果您查看xml和代码,我将不知道属性名称。。。我试着做一个简单的例子,我可以得到属性值,即“myName”、“myNextAttribute”和“blah”,但我不能得到属性名,即“name”、“nextAttribute”和“etc1”。任何想法,我想我都会错过一些简单的东西…但我肯定错过了 static void Main(string[] args) { string xml = "<test name=\"myName\" n

我正在接收动态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;
                }
            }
        }
    }
static void Main(字符串[]args)
{
字符串xml=”“;
TextReader sr=新的StringReader(xml);
使用(XmlReader xr=XmlReader.Create(sr))
{
而(xr.Read())
{
开关(xr.NodeType)
{
case XmlNodeType.Element:
如果(xr.HasAttributes)
{
对于(int i=0;i
您可以在中看到:

if(reader.HasAttributes){
Console.WriteLine(“属性”);
while(reader.MoveToNextAttribute()){
Console.WriteLine(“{0}={1}”,reader.Name,reader.Value);
}
//将读取器移回元素节点。
reader.MoveToElement();
}

由于您只有一个case,因此不需要切换,请尝试将其滚动到if语句中

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

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

谢谢,我认为它必须是相近的。。。我还发现,在我最初的for循环中,我本可以执行xr.MoveToAttribute(I)并获得相同的效果。在本例中,是的,在“真实世界”场景中,我有更多的案例,我只是尝试保持它干净。谢谢你。
if (xr.NodeType && xr.HasAttributes)
{
    ...
}