Отображение информации XML в метке - PullRequest
0 голосов
/ 17 марта 2012

В общем, я могу корректно загрузить свой xml-файл в просмотр списка, но затем я хочу, чтобы пользователь мог щелкнуть по элементам в просмотре списка и по отображаемой им информации об этом элементе, которая находится не в просмотре списка, а в xml.
Поэтому я подумал, что смогу загрузить XML, когда пользователь нажимает на элемент, и каким-то образом получать эту информацию, но она ничего не отображает на ярлыке. Любая помощь будет оценена спасибо.

XML:

<?xml version = "1.0" encoding="utf-8"?>
<project>
  <test>
    <code>ss</code>
    <name>test</name>
  </test>

  <test>
    <code>ss1</code>
    <name>test1</name>
  </test>
</project>

Код:

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;

namespace form
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    XmlTextReader reader = new XmlTextReader("XMLfile1.xml");
    XmlNodeType type;

    while (reader.Read())
    {
        type = reader.NodeType;
        if (type == XmlNodeType.Element)
        {
            if (reader.Name == "name")
            {
                reader.Read();
                listView1.Items.Add(reader.Value);
            }
        }
    }
    reader.Close();


    }

    private void Form1_Load(object sender, EventArgs e)
    {


    }

    private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {


        XmlTextReader reader = new XmlTextReader("XMLFile1.xml");
        XmlNodeType type;

        while (reader.Read())
        {
            type = reader.NodeType;

            if (type == XmlNodeType.Element)
            {
                if (reader.Name == "test")
                {
                    reader.Read();
                    codelabel.Text = "s";
                }


            }
        }
    }

    private void groupBox2_Enter(object sender, EventArgs e)
    {

    }
}
}

Ответы [ 3 ]

1 голос
/ 18 марта 2012

Использование этих расширений ,

Запись:

protected string GetName(string code)
{
    var item = XElement.Load("XMLfile1.xml").GetEnumerable("test", x =>
            new
            {
                Code = x.Get("code", string.Empty),
                Name = x.Get("name", string.Empty)
            })
            .FirstOrDefault(i => i.Code == code);
    if(null != item)
        return item.Name;
    return "Item not found";
}

Это просматривает список из файла, проверяет каждый, пока не найдет правильный код, а затемвозвращает значение name.Затем поместите это значение под свой контроль.Если я ошибаюсь, что вы ищете по имени, просто замените код в строке FirstOrDefault на строку return item.Name.

0 голосов
/ 18 марта 2012

Свойство Value для узла test пусто (оно содержит только подузлы, без текста).Я думаю, что вы должны изменить свой код для накопления текста (с объявлениями, вы можете увидеть пример на MSDN) с начала теста до чтения его конечного тега.

Как альтернатива (если файл XML не большой) вы можете использовать LINQ to XML или просто XmlDocument (его гораздо проще читать, и вы всегда можете иметь InnerXml любого узла).В качестве примера вы можете посмотреть эту статью о CodeProject .

. Для краткого списка того, что вы можете сделать для разбора XML, вы можете прочитать эту статью (я нене думаю, что это очень хорошо, но, по крайней мере, это ... список).

0 голосов
/ 17 марта 2012

Создайте класс, который имитирует данные в вашем файле.Например:

public class Project
{
    public string Code { get; set; }
    public string Name { get; set; }
}

Затем вы прочитаете свой XML-файл в список, который в итоге окажется списком.Взгляните на этот урок:

Простой синтаксический анализ XML

private List<Project> _projects;

Затем вы добавите свои данные из списка в свой ListView.

foreach(Project proj in _projects)
{
    listView1.Items.Add(proj.Name); 
}

В вашем ListView SelectedIndexChanged вы можете получить доступ к нужному индексу списка, чтобы отобразить правильное значение для вашей метки.

 codeLabel.Text = _projects[listView1.FocusedItem.Index].Code;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...