我正在尝试阅读XML文档。现在,如果我从“/ word / link1”读取,我可以调用信息,但是当我更深入“buttons / word / link1”时,它根本无法读取InnerText。
public void rxml()
{
XmlTextReader read = new XmlTextReader("C:\\myXmFile.xml");
XmlDocument doc = new XmlDocument();
doc.Load(read);
switch (P)
{
case "word":
label11.Text = "Microsoft Word Documents";
l1 = doc.SelectSingleNode("buttons/word/link1").InnerText = "hello";
p1 = doc.SelectSingleNode("buttons/word/path1").InnerText;
l2 = doc.SelectSingleNode("buttons/word/link2").InnerText = linkLabel2.Text;
p2 = doc.SelectSingleNode("buttons/word/path2").InnerText;
l3 = doc.SelectSingleNode("buttons/word/link3").InnerText = linkLabel3.Text;
p3 = doc.SelectSingleNode("buttons/word/path3").InnerText;
l4 = doc.SelectSingleNode("buttons/word/link4").InnerText = linkLabel4.Text;
p4 = doc.SelectSingleNode("buttons/word/path4").InnerText;
l5 = doc.SelectSingleNode("buttons/word/link5").InnerText = linkLabel5.Text;
p5 = doc.SelectSingleNode("buttons/word/path5").InnerText;
l6 = doc.SelectSingleNode("buttons/word/link6").InnerText = linkLabel6.Text;
p6 = doc.SelectSingleNode("buttons/word/path6").InnerText;
l7 = doc.SelectSingleNode("buttons/word/link7").InnerText = linkLabel7.Text;
p7 = doc.SelectSingleNode("buttons/word/path7").InnerText;
l8 = doc.SelectSingleNode("buttons/word/link8").InnerText = linkLabel8.Text;
p8 = doc.SelectSingleNode("buttons/word/path8").InnerText;
l9 = doc.SelectSingleNode("buttons/word/link9").InnerText = linkLabel9.Text;
p9 = doc.SelectSingleNode("buttons/word/path9").InnerText;
l10 = doc.SelectSingleNode("buttons/word/link10").InnerText = linkLabel10.Text;
p10 = doc.SelectSingleNode("buttons/word/path10").InnerText;
read.Close();
break;
case "excel":
label11.Text = "Microsoft Excel Documents";
l1 = doc.SelectSingleNode("buttons/excel/link1").InnerText = linkLabel1.Text;
p1 = doc.SelectSingleNode("buttons/excel/path1").InnerText;
l2 = doc.SelectSingleNode("buttons/excel/link2").InnerText = linkLabel2.Text;
p2 = doc.SelectSingleNode("buttons/excel/path2").InnerText;
l3 = doc.SelectSingleNode("buttons/excel/link3").InnerText = linkLabel3.Text;
p3 = doc.SelectSingleNode("buttons/excel/path3").InnerText;
l4 = doc.SelectSingleNode("buttons/excel/link4").InnerText = linkLabel4.Text;
p4 = doc.SelectSingleNode("buttons/excel/path4").InnerText;
l5 = doc.SelectSingleNode("buttons/excel/link5").InnerText = linkLabel5.Text;
p5 = doc.SelectSingleNode("buttons/excel/path5").InnerText;
l6 = doc.SelectSingleNode("buttons/excel/link6").InnerText = linkLabel6.Text;
p6 = doc.SelectSingleNode("buttons/excel/path6").InnerText;
l7 = doc.SelectSingleNode("buttons/excel/link7").InnerText = linkLabel7.Text;
p7 = doc.SelectSingleNode("buttons/excel/path7").InnerText;
l8 = doc.SelectSingleNode("buttons/excel/link8").InnerText = linkLabel8.Text;
p8 = doc.SelectSingleNode("buttons/excel/path8").InnerText;
l9 = doc.SelectSingleNode("buttons/excel/link9").InnerText = linkLabel9.Text;
p9 = doc.SelectSingleNode("buttons/excel/path9").InnerText;
l10 = doc.SelectSingleNode("buttons/excel/link10").InnerText = linkLabel10.Text;
p10 = doc.SelectSingleNode("buttons/excel/path10").InnerText;
read.Close();
break;
case "adobe":
label11.Text = "Adobe PDF Documents";
l1 = doc.SelectSingleNode("buttons/adobe/link1").InnerText = linkLabel1.Text;
p1 = doc.SelectSingleNode("buttons/adobe/path1").InnerText;
l2 = doc.SelectSingleNode("buttons/adobe/link2").InnerText = linkLabel2.Text;
p2 = doc.SelectSingleNode("buttons/adobe/path2").InnerText;
l3 = doc.SelectSingleNode("buttons/adobe/link3").InnerText = linkLabel3.Text;
p3 = doc.SelectSingleNode("buttons/adobe/path3").InnerText;
l4 = doc.SelectSingleNode("buttons/adobe/link4").InnerText = linkLabel4.Text;
p4 = doc.SelectSingleNode("buttons/adobe/path4").InnerText;
l5 = doc.SelectSingleNode("buttons/adobe/link5").InnerText = linkLabel5.Text;
p5 = doc.SelectSingleNode("buttons/adobe/path5").InnerText;
l6 = doc.SelectSingleNode("buttons/adobe/link6").InnerText = linkLabel6.Text;
p6 = doc.SelectSingleNode("buttons/adobe/path6").InnerText;
l7 = doc.SelectSingleNode("buttons/adobe/link7").InnerText = linkLabel7.Text;
p7 = doc.SelectSingleNode("buttons/adobe/path7").InnerText;
l8 = doc.SelectSingleNode("buttons/adobe/link8").InnerText = linkLabel8.Text;
p8 = doc.SelectSingleNode("buttons/adobe/path8").InnerText;
l9 = doc.SelectSingleNode("buttons/adobe/link9").InnerText = linkLabel9.Text;
p9 = doc.SelectSingleNode("buttons/adobe/path9").InnerText;
l10 = doc.SelectSingleNode("buttons/adobe/link10").InnerText = linkLabel10.Text;
p10 = doc.SelectSingleNode("buttons/adobe/path10").InnerText;
read.Close();
break;
case "powerpoint":
label11.Text = "Microsoft Powerpoint Documents";
l1 = doc.SelectSingleNode("buttons/powerpoint/link1").InnerText = linkLabel1.Text;
p1 = doc.SelectSingleNode("buttons/powerpoint/path1").InnerText;
l2 = doc.SelectSingleNode("buttons/powerpoint/link2").InnerText = linkLabel2.Text;
p2 = doc.SelectSingleNode("buttons/powerpoint/path2").InnerText;
l3 = doc.SelectSingleNode("buttons/powerpoint/link3").InnerText = linkLabel3.Text;
p3 = doc.SelectSingleNode("buttons/powerpoint/path3").InnerText;
l4 = doc.SelectSingleNode("buttons/powerpoint/link4").InnerText = linkLabel4.Text;
p4 = doc.SelectSingleNode("buttons/powerpoint/path4").InnerText;
l5 = doc.SelectSingleNode("buttons/powerpoint/link5").InnerText = linkLabel5.Text;
p5 = doc.SelectSingleNode("buttons/powerpoint/path5").InnerText;
l6 = doc.SelectSingleNode("buttons/powerpoint/link6").InnerText = linkLabel6.Text;
p6 = doc.SelectSingleNode("buttons/powerpoint/path6").InnerText;
l7 = doc.SelectSingleNode("buttons/powerpoint/link7").InnerText = linkLabel7.Text;
p7 = doc.SelectSingleNode("buttons/powerpoint/path7").InnerText;
l8 = doc.SelectSingleNode("buttons/powerpoint/link8").InnerText = linkLabel8.Text;
p8 = doc.SelectSingleNode("buttons/powerpoint/path8").InnerText;
l9 = doc.SelectSingleNode("buttons/powerpoint/link9").InnerText = linkLabel9.Text;
p9 = doc.SelectSingleNode("buttons/powerpoint/path9").InnerText;
l10 = doc.SelectSingleNode("buttons/powerpoint/link10").InnerText = linkLabel10.Text;
p10 = doc.SelectSingleNode("buttons/powerpoint/path10").InnerText;
read.Close();
break;
case "publisher":
label11.Text = "Microsoft Publisher Documents";
l1 = doc.SelectSingleNode("buttons/publisher/link1").InnerText = linkLabel1.Text;
p1 = doc.SelectSingleNode("buttons/publisher/path1").InnerText;
l2 = doc.SelectSingleNode("buttons/publisher/link2").InnerText = linkLabel1.Text;
p2 = doc.SelectSingleNode("buttons/publisher/path2").InnerText;
l3 = doc.SelectSingleNode("buttons/publisher/link3").InnerText = linkLabel1.Text;
p3 = doc.SelectSingleNode("buttons/publisher/path3").InnerText;
l4 = doc.SelectSingleNode("buttons/publisher/link4").InnerText = linkLabel1.Text;
p4 = doc.SelectSingleNode("buttons/publisher/path4").InnerText;
l5 = doc.SelectSingleNode("buttons/publisher/link5").InnerText = linkLabel1.Text;
p5 = doc.SelectSingleNode("buttons/publisher/path5").InnerText;
l6 = doc.SelectSingleNode("buttons/publisher/link6").InnerText = linkLabel1.Text;
p6 = doc.SelectSingleNode("buttons/publisher/path6").InnerText;
l7 = doc.SelectSingleNode("buttons/publisher/link7").InnerText = linkLabel1.Text;
p7 = doc.SelectSingleNode("buttons/publisher/path7").InnerText;
l8 = doc.SelectSingleNode("buttons/publisher/link8").InnerText = linkLabel1.Text;
p8 = doc.SelectSingleNode("buttons/publisher/path8").InnerText;
l9 = doc.SelectSingleNode("buttons/publisher/link9").InnerText = linkLabel1.Text;
p9 = doc.SelectSingleNode("buttons/publisher/path9").InnerText;
l10 = doc.SelectSingleNode("buttons/publisher/link10").InnerText = linkLabel1.Text;
p10 = doc.SelectSingleNode("buttons/publisher/path10").InnerText;
read.Close();
break;
case "access":
label11.Text = "Microsoft Access Documents";
l1 = doc.SelectSingleNode("buttons/access/link1").InnerText = linkLabel1.Text;
p1 = doc.SelectSingleNode("buttons/access/path1").InnerText;
l2 = doc.SelectSingleNode("buttons/access/link2").InnerText = linkLabel2.Text;
p2 = doc.SelectSingleNode("buttons/access/path2").InnerText;
l3 = doc.SelectSingleNode("buttons/access/link3").InnerText = linkLabel3.Text;
p3 = doc.SelectSingleNode("buttons/access/path3").InnerText;
l4 = doc.SelectSingleNode("buttons/access/link4").InnerText = linkLabel4.Text;
p4 = doc.SelectSingleNode("buttons/access/path4").InnerText;
l5 = doc.SelectSingleNode("buttons/access/link5").InnerText = linkLabel5.Text;
p5 = doc.SelectSingleNode("buttons/access/path5").InnerText;
l6 = doc.SelectSingleNode("buttons/access/link6").InnerText = linkLabel6.Text;
p6 = doc.SelectSingleNode("buttons/access/path6").InnerText;
l7 = doc.SelectSingleNode("buttons/access/link7").InnerText = linkLabel7.Text;
p7 = doc.SelectSingleNode("buttons/access/path7").InnerText;
l8 = doc.SelectSingleNode("buttons/access/link8").InnerText = linkLabel8.Text;
p8 = doc.SelectSingleNode("buttons/access/path8").InnerText;
l9 = doc.SelectSingleNode("buttons/access/link9").InnerText = linkLabel9.Text;
p9 = doc.SelectSingleNode("buttons/access/path9").InnerText;
l10 = doc.SelectSingleNode("buttons/access/link10").InnerText = linkLabel10.Text;
p10 = doc.SelectSingleNode("buttons/access/path10").InnerText;
read.Close();
break;
}
}
答案 0 :(得分:1)
为了更容易访问数据,您应该创建用于访问数据的类。通过将问题分解为不同的级别,它使整体更容易理解,调试和保持最新。我已经使用this file of extensions创建了一个示例。
要使用以下内容,您需要获得link1
word
个:
ButtonsXml buttons = new ButtonsXml("C:\\myXmFile.xml");
string link1 = buttons["word"][1].Link;
以下是代码:
public class ButtonsXml
{
XElement self;
Dictionary<string, DataCollection> list = new Dictionary<string, DataCollection>();
public ButtonsXml(string file)
{
self = XElement.Load(file);
}
public DataCollection this[string name]
{
get
{
if (list.ContainsKey(name))
return list[name];
DataCollection c = new DataCollection(self.GetElement(name));
list.Add(name, c);
return c;
}
}
public void Save(string file)
{
self.Save(file);
}
}
public class DataCollection
{
XElement self;
public Dictionary<int, Element> list = new Dictionary<int,Element>();
public DataCollection(XElement self)
{
this.self = self;
}
public Element this[int index]
{
get
{
if (list.ContainsKey(index))
return list[index];
Element e = new Element(self, index);
list.Add(index, e);
return e;
}
}
}
public class Element
{
XElement parent;
int index;
public Element(XElement parent, int index)
{
this.parent = parent;
this.index = index;
}
public string Path
{
get { return parent.GetString("path" + index.ToString(), string.Empty); }
set { parent.Set("path" + index.ToString(), value, XElementConversions.ELEMENT); }
}
public string Link
{
get { return parent.GetString("link" + index.ToString(), string.Empty); }
set { parent.Set("link" + index.ToString(), value, XElementConversions.ELEMENT); }
}
}
如果你想将值设置为Path或Link,我添加了setter:它们将以相同的方式设置。然后需要调用buttons.Save(file)
将更改保存到文件。
buttons["word"][1].Link = "new value";