我有Data.xml:
<?xml version="1.0" encoding="utf-8" ?>
<data>
<album>
<slide title="Autum Leaves"
description="Leaves from the fall of 1986"
source="images/Autumn Leaves.jpg"
thumbnail="images/Autumn Leaves_thumb.jpg" />
<slide title="Creek"
description="Creek in Alaska"
source="images/Creek.jpg"
thumbnail="images/Creek_thumb.jpg" />
</album>
</data>
我希望能够通过GridView编辑每个Slide节点的属性(添加了“Select”列。)到目前为止,我有:
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
int selectedIndex = GridView1.SelectedIndex;
LoadXmlData(selectedIndex);
}
private void LoadXmlData(int selectedIndex)
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(MapPath(@"..\photo_gallery\Data.xml"));
XmlNodeList nodelist = xmldoc.DocumentElement.ChildNodes;
XmlNode xmlnode = nodelist.Item(selectedIndex);
titleTextBox.Text = xmlnode.Attributes["title"].InnerText;
descriptionTextBox.Text = xmlnode.Attributes["description"].InnerText;
sourceTextBox.Text = xmlnode.Attributes["source"].InnerText;
thumbTextBox.Text = xmlnode.Attributes["thumbnail"].InnerText;
}
LoadXmlData的代码只是我的一个猜测 - 我是新手以这种方式使用xml。我想让用户从gridview中选择行,然后填充一组文本框,每个幻灯片都归属于更新回Data.xml文件。
我得到的错误是对象引用未设置为对象的实例“在行:titleTextBox.Text = xmlnode.Attributes [”@ title“]。InnerText;
所以我没有达到幻灯片节点的属性“title”。感谢您的任何想法。
答案 0 :(得分:3)
是的 - 鉴于您的XML,xmldoc.DocumentElement.ChildNodes;
语句将为您提供一个节点 - <album>
节点 - 并且它没有任何名为["title"]
的属性。
你需要
更改您选择节点的方式; xmldoc.DocumentElement
对应于<data>
节点,它的.ChildNodes
集合将包含所有直接子节点 - 在这种情况下是唯一的<album>
节点 - 没有别的。
检查是否存在! (而不只是假设它有效......)
试试这个:
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(MapPath(@"..\photo_gallery\Data.xml"));
XmlNodeList nodelist = xmldoc.SelectNodes("/data/album/slide");
foreach(XmlNode xmlnode in nodelist)
{
if(xmlnode.Attributes["title"] != null
titleTextBox.Text = xmlnode.Attributes["title"].InnerText;
if(xmlnode.Attributes["description"] != null
descriptionTextBox.Text = xmlnode.Attributes["description"].InnerText;
if(xmlnode.Attributes["source"] != null
sourceTextBox.Text = xmlnode.Attributes["source"].InnerText;
if(xmlnode.Attributes["thumbnail"] != null
thumbTextBox.Text = xmlnode.Attributes["thumbnail"].InnerText;
}
答案 1 :(得分:0)
@title
是对属性的XPath调用,即"//slide['@title']"
XmlNode.Attributes
仅按名称保存属性 - title
,即node.Attributes["title"]