Как мне получить атрибут XML для отображения в списке c#

#c# #xml

#c# #xml

Вопрос:

Это мой код, я перенес все данные из XML-файла в список, отсутствует только атрибут, у меня возникают некоторые трудности при попытке отобразить атрибут. не уверен, что именно делать или чего мне не хватает. я никогда раньше не делал xml.

 string startPath = Application.StartupPath   "\ContactManager.xml";
        XmlTextReader textReader = new XmlTextReader(startPath);
        string Names = "";
        string sex = "";

        while (textReader.Read())
        {
            switch (textReader.NodeType)
            {
                case XmlNodeType.Attribute:
                    sex = textReader.GetAttribute("Sex");
                    break;
                case XmlNodeType.Element:
                    Names = textReader.Name;
                    break;
                case XmlNodeType.Text:
                    Console.WriteLine();
                    lbDisplay.Items.Add(sex   Names   ": "   textReader.Value);
                    break; 
            }

        }
  

это некоторые элементы, которые в файле xml Sex являются атрибутом.

 <Contact Sex="M">
<FirstName>Mickey</FirstName>
<LastName>Mouse</LastName>
<PhoneNumber>401-555-1212</PhoneNumber>
<FaxNumber>401-666-6666</FaxNumber>
<EmailAddress>mmouse@disney.com</EmailAddress>
</Contact>
  

Комментарии:

1. Похоже на простое несоответствие имен. Ваше имя атрибута — «Пол», а не «Контакт».

2. @JacobProffitt я пробовал, но это все еще не отображается в списке

3. Есть ли тег </Contact> ? В противном случае этот XML недействителен. Похоже, что, возможно, Contact является родительским узлом для других значений

4. @Dijkgraaf да, их есть

Ответ №1:

Вам нужно изменить свой код на:

     string startPath = Application.StartupPath   "\ContactManager.xml";
    XmlTextReader textReader = new XmlTextReader(startPath);
    string Names = "";
    string sex = "";

    while (textReader.Read())
    {
        switch (textReader.NodeType)
        {
            case XmlNodeType.Element:
                Names = textReader.Name;
              if(textReader.Name == "Contact") sex = textReader.GetAttribute("Sex");
                break;
            case XmlNodeType.Text:
                Console.WriteLine();
                lbDisplay.Items.Add(sex   Names   ": "   textReader.Value);
                break; 
        }

    }
  

Комментарии:

1. @Angel это то, что ты ищешь?

2. @Angel можете ли вы объяснить мне, что вы хотите показать в списке? только пол или имя, фамилию и пол?

3. Я уже получил имя, фамилию и т.д. В списке единственное, что мне нужно. Sex у меня несколько контактов, поэтому для каждого контакта я хочу, чтобы перед каждым контактом отображался пол.

4. @Angel Я редактирую код, теперь вы получаете секс с другой информацией

5. большое спасибо, что решил мою проблему, я буду возиться с ним, чтобы он не отображался перед каждым тегом :))