Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Вывод данных из xml


Автор: WebWolf 25.7.2009, 13:12
Каким образом вывести данные из нужного каталога в примере снизу есть каталог Music как вывести только из него названия каналов ссылки и картинки.


Код


<?xml version="1.0" encoding="utf-8" ?>
<catalog>
<type title="Music">
<coutry name="Russia">
<tv title="Box TV" url="mms://81.89.49.210/musicbox?MSWMExt=.asf" pic="http://tv.akado.ru/ai/channel/5/logo120x120/logo120x120.gif"/>
<tv title="Box2 TV" url="mms://81.89.49.210/musicbox?MSWMExt=.asf" pic="http://tv.akado.ru/ai/channel/5/logo120x120/logo120x120.gif"/>
<tv title="Box3 TV" url="mms://81.89.49.210/musicbox?MSWMExt=.asf" pic="http://tv.akado.ru/ai/channel/5/logo120x120/logo120x120.gif"/>
</coutry>
</type>
<type title="News">
<coutry name="Russia">
<tv title="News TV" url="mms://81.89.49.210/musicbox?MSWMExt=.asf" pic="http://tv.akado.ru/ai/channel/5/logo120x120/logo120x120.gif"/>
</coutry>
</type>
<type title="lol">
<coutry name="Russia">
<tv title="lol TV" url="mms://81.89.49.210/musicbox?MSWMExt=.asf" pic="http://tv.akado.ru/ai/channel/5/logo120x120/logo120x120.gif"/>
</coutry>
</type>
<type title="lol2">
<coutry name="Russia">
<tv title="lol2 TV" url="mms://81.89.49.210/musicbox?MSWMExt=.asf" pic="http://tv.akado.ru/ai/channel/5/logo120x120/logo120x120.gif"/>
</coutry>
</type>
</catalog>

-----------------------------------------------------------
Код

var stream = new StreamReader(@"CatalogTV.xml");
var readTV = new XmlTextReader(stream);
XmlDocument tvDoc = new XmlDocument();
tvDoc.Load(readTV);

// выводим все типы (Music,News,lol ...)
videoItems = tvDoc.SelectNodes("catalog/type");
foreach (XmlNode videoItem in videoItems)
{
typeTV.Items.Add(String.Format(videoItem.Attributes["title"].InnerText));
}


//Когда начинаю выводит но выводит все названия каналов. Как вывести кз конуретного каталога) т.к я выбираю в ComboBox Music и в соответствии с это категорией я получаю все фильмы из этого каталога. Должно получится (Box TV, Box2 TV, Box3 TV)
videoItems = tvDoc.SelectNodes("catalog/type/coutry/tv");

foreach (XmlNode videoItem2 in videoItems)
{
if (a == typeTV.SelectedItem.ToString())
{
catalogTV.Items.Add(String.Format(videoItem2.Attributes["title"].InnerText));
}

Что мне надо:
Я вывожу все типы в ComboBox (Music,News,lol...), потом выбираю конкретный тип (music) и получаю в лист боксе все каналы конкретного типа (Box TV,Box2 TV)... потом выбираю конкретный канал и получаю все его данные: название (Box TV), ссылка, картинка итд

Автор: WebWolf 25.7.2009, 16:41
ХЕЛП ну хоть кто нибудь любые идеи(( просто очень надо но не могу сообразить((

Автор: antslava 25.7.2009, 16:58
Лови проект =)

Автор: WebWolf 25.7.2009, 17:13
Спасибо тебе огромное)) Ты настоящий профи) smile 

Автор: WebWolf 25.7.2009, 17:52
Только вот за гвоздка с этим куском кода:
 
Код

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(listBox1.SelectedIndex != null)
            {
                XmlNodeList list = _select.ChildNodes;
                foreach (XmlNode node in list)
                {
                    XmlNodeList list_2 = node.ChildNodes;
                    foreach (XmlNode xmlNode in list_2)
                    {
                        if(xmlNode.Attributes["title"].Value.Equals(listBox1.SelectedItem.ToString()))
                        {
                            textBox1.Text = xmlNode.Attributes["title"].Value + " " +
                                            xmlNode.Attributes["url"].Value + " " + xmlNode.Attributes["pic"].Value;
                        }
                    }
                }
            }
        }

Когда выбираем Допустим раздел Music потом выбираем ТВ то все пашет)) потом когда мы пытаемся сменить раздел то listBox1.SelectedItem.ToString() получается равным null . Я делаю на WPF

Автор: WebWolf 25.7.2009, 18:08
вот мой проект!

Автор: antslava 25.7.2009, 18:34
Замени 
Код

 if(listBox1.SelectedIndex != null)

на
Код

if(listBox1.SelectedItem != null)

Автор: antslava 26.7.2009, 01:54
Вот еще проект с поиском через XPath

Автор: Rififi 26.7.2009, 13:32
снизу есть каталог Music как вывести только из него названия каналов ссылки и картинки.

Юзай xpath
Код
var xml = new XmlDocument();
xml.Load("...");

var music = xml.SelectNodes("/catalog/type[@title=\"Music\"]/coutry/tv");
var data = music.OfType<XmlNode>().Select(
    p => new
    {
        Title = p.Attributes["title"].Value,
        Url = p.Attributes["url"].Value,
        Pic = p.Attributes["pic"].Value
    }).ToList();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)