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
Ряд вопросов про данные в 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 блоки типа тех что уже есть?
Спасибо.
Код:
как достать данные между тэгов и их свойства смотри MSDN / ищи в нете - должно быть много. Достанешь данные из xml и положишь в гридвью
есть второй способ:
читать по Элементу (открывающийся тэг, данные, закрывающийся тэг, ...). но он мне не нравится)
Редактировать как не знаю. Могу предположить, что нужно перезаписать старый (создаешь новый в коде, изменяешь, записываешь).
это ответ на какой из 4 вопросов?
Цитата: qik
это ответ на какой из 4 вопросов?
2,3,4
Можно "замапить" этот xml при помощи атрибутов на бизнес обеъкты и сериализовывать/десериализовывать стандартными средствами, что закроет все четыре вопроса.
Код:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("gallerydata.xml");
XmlNode xmlNode1 = xmlDoc.DocumentElement.FirstChild;
XmlNode xmlNode2 = xmlNode1.FirstChild;
xmlDoc.Load("gallerydata.xml");
XmlNode xmlNode1 = xmlDoc.DocumentElement.FirstChild;
XmlNode xmlNode2 = xmlNode1.FirstChild;
последней строчкой полчил name1.jpg, окей, а как мне теперь ее в gridview засунуть?
Код:
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;
}
}
}
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;
}
}
}
в теле switch вместо присвоения переменной dataFromTag присваиваешь значение нужному полю примерно так:
Код:
GridView1.Rows.Cells[j].Text = infoNd.InnerText;
Цитата: IYAKOV
2)
в теле switch вместо присвоения переменной dataFromTag присваиваешь значение нужному полю примерно так:
в теле switch вместо присвоения переменной dataFromTag присваиваешь значение нужному полю примерно так:
Код:
GridView1.Rows.Cells[j].Text = infoNd.InnerText;
собственно с этой строчкой и была проблема.
непонятно как обратиться к элементу таблицы.
Цитата: 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
}
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
}
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
}
в примере выше данные занесутся в последовательности как указаны в документе
если тэги обязательно повторяются одиновово то switch можно опустить и получится так:
XmlDataSource
пример использования: http://msdn2.microsoft.com/en-us/library/13ftcwy9(vs.80).aspx
XmlDataDocument
http://msdn2.microsoft.com/en-us/library/system.xml.xmldatadocument.aspx