Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ряд вопросов про данные в xml

381
22 июня 2007 года
qik
116 / / 20.06.2000
Помогите разобраться вот с чем, есть xml документ такого вида:

<?xml version="1.0" encoding="UTF-8"?>
<gallery title="" frameColor="0x000000" frameWidth="10" imagePadding="20" displayTime="6">

<image>
<filename>name1.jpg</filename>
<caption>bla1</caption>
<width>640</width>
<height>480</height>
</image>

<image>
<filename>name2.jpg</filename>
<caption>bla1</caption>
<width>640</width>
<height>480</height>
</image>

</gallery>

1. как мне настроить мой гридвью чтобы можно было редактировать поля title, frameColor, frameWidth и пр. ?
2. как мне в гридвью получить name1.jpg, bla1, 640, 480, name2.jpg и пр. ?
3. как сделать так чтобы их (данные из п.2) можно было редактировать?
4. как добавлять в этот xml блоки типа тех что уже есть?

Спасибо.
17K
22 июня 2007 года
IYAKOV
49 / / 03.05.2007
 
Код:
XmlDocument newDoc = new XmlDocument();
newDoc.Load(newXmlPath);//путь к xml
//получаем Node с которыми в дальнейшем работаем
//XmlNode newNode1 = newDoc.FirstChild;//переход к первому вложеннoму тэгу в xml документе newDoc
//XmlNode newNode2 = newNode1.NextSibling;//переход к тэгу, следующему за newNode1 на текущем уровне вложенности
//string text = newNode1.InnerText;//текст между тэгами
//TODO

как достать данные между тэгов и их свойства смотри MSDN / ищи в нете - должно быть много. Достанешь данные из xml и положишь в гридвью

есть второй способ:
читать по Элементу (открывающийся тэг, данные, закрывающийся тэг, ...). но он мне не нравится)

Редактировать как не знаю. Могу предположить, что нужно перезаписать старый (создаешь новый в коде, изменяешь, записываешь).
381
22 июня 2007 года
qik
116 / / 20.06.2000
это ответ на какой из 4 вопросов?
17K
23 июня 2007 года
IYAKOV
49 / / 03.05.2007
Цитата: qik
это ответ на какой из 4 вопросов?


2,3,4

713
23 июня 2007 года
Ap0k
360 / / 13.03.2006
Можно "замапить" этот xml при помощи атрибутов на бизнес обеъкты и сериализовывать/десериализовывать стандартными средствами, что закроет все четыре вопроса.
381
24 июня 2007 года
qik
116 / / 20.06.2000
 
Код:
XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load("gallerydata.xml");
        XmlNode xmlNode1 = xmlDoc.DocumentElement.FirstChild;
        XmlNode xmlNode2 = xmlNode1.FirstChild;

последней строчкой полчил name1.jpg, окей, а как мне теперь ее в gridview засунуть?
17K
24 июня 2007 года
IYAKOV
49 / / 03.05.2007
1)
Код:
XmlDocument doc = new XmlDocument();
            doc.Load("gallerydata.xml");

            XmlNode nd = doc.FirstChild;//tag xml
            nd = nd.NextSibling;//tag galerry
            string galleryInfo = nd.InnerText;// gallery tag info
            /*analyse as simple string*/

            //for all image tags do:
            for(XmlNode node=nd.FirstChild; node!=null; node = node.NextSibling)
            {
                //for all nodes in image tag do:
                for(XmlNode infoNd=node.FirstChild; infoNd!=null; infoNd = infoNd.NextSibling)
                {
                    string dataFromTag;
                    switch(infoNd.Name)
                    {
                        case "filename":
                            dataFromTag = infoNd.InnerText;
                            break;
                        case "caption":
                            dataFromTag = infoNd.InnerText;
                            break;
                        case "width":
                            dataFromTag = infoNd.InnerText;
                            break;
                        case "height":
                            dataFromTag = infoNd.InnerText;
                            break;
                    }
                }
            }
17K
24 июня 2007 года
IYAKOV
49 / / 03.05.2007
2)
в теле switch вместо присвоения переменной dataFromTag присваиваешь значение нужному полю примерно так:
 
Код:
GridView1.Rows.Cells[j].Text = infoNd.InnerText;
381
24 июня 2007 года
qik
116 / / 20.06.2000
Цитата: IYAKOV
2)
в теле switch вместо присвоения переменной dataFromTag присваиваешь значение нужному полю примерно так:
 
Код:
GridView1.Rows.Cells[j].Text = infoNd.InnerText;



собственно с этой строчкой и была проблема.
непонятно как обратиться к элементу таблицы.

17K
25 июня 2007 года
IYAKOV
49 / / 03.05.2007
Цитата: qik
собственно с этой строчкой и была проблема.
непонятно как обратиться к элементу таблицы.


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

Возможно создавать таблицу по строчно. Создать отдельно строку с данными. Потом добавить строку в гридвью.

Про добавление. что-то вроде этого:

Код:
int offset = 0;//offset for equal part of data
            for(XmlNode node=nd.FirstChild; node!=null; node = node.NextSibling)
            {
                //for all nodes in image tag do:
                for(XmlNode infoNd=node.FirstChild; infoNd!=null; infoNd = infoNd.NextSibling)
                {
                    switch(infoNd.Name)
                    {
                        case "filename":
                            GridView1.Rows[0+offset].Cells[0].Text = infoNd.InnerText;
                            break;
                        case "caption":
                            GridView1.Rows[1+offset].Cells[1].Text= infoNd.InnerText;
                            break;
                        case "width":
                            GridView1.Rows[2+offset].Cells[2].Text= infoNd.InnerText;
                            break;
                        case "height":
                            GridView1.Rows[3+offset].Cells[3].Text= infoNd.InnerText;
                            break;
                    }
                }
                offset+=4;//in this e.g. rows repeat each 4 times
            }

Код:
int offset = 0;//offset for equal part of data
            for(XmlNode node=nd.FirstChild; node!=null; node = node.NextSibling)
            {
                int col=0;//colomn index
                //for all nodes in image tag do:
                for(XmlNode infoNd=node.FirstChild; infoNd!=null; infoNd = infoNd.NextSibling)
                {
                     GridView1.Rows[0+offset].Cells[col].Text = infoNd.InnerText;
                     col++;
                }
                offset+=4;//in this e.g. rows repeat each 4 times
            }
17K
25 июня 2007 года
IYAKOV
49 / / 03.05.2007
Прим.
в примере выше данные занесутся в последовательности как указаны в документе

если тэги обязательно повторяются одиновово то switch можно опустить и получится так:
6.2K
24 августа 2007 года
denight
1 / / 13.12.2003
Возможно это поможет
XmlDataSource
пример использования: http://msdn2.microsoft.com/en-us/library/13ftcwy9(vs.80).aspx
XmlDataDocument
http://msdn2.microsoft.com/en-us/library/system.xml.xmldatadocument.aspx
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог