C# 从XML文件C中读取#

C# 从XML文件C中读取#,c#,xml,winforms,xmlreader,C#,Xml,Winforms,Xmlreader,我正在尝试读取一个XML文档。现在,如果我正在阅读“/word/link1”,我可以调用信息,但一旦我深入“buttons/word/link1”,它就根本无法读取内部文本 public void rxml() { XmlTextReader read = new XmlTextReader("C:\\myXmFile.xml"); XmlDocument doc = new XmlDocument(); doc.Load(read);

我正在尝试读取一个XML文档。现在,如果我正在阅读“/word/link1”,我可以调用信息,但一旦我深入“buttons/word/link1”,它就根本无法读取内部文本

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;

        }

    }

XML文件

为了更方便地访问数据,您应该创建用于访问数据的类。通过将问题分解为不同的层次,它使整个问题更易于理解、调试和更新。我已经用这个方法创建了一个例子

要使用以下内容,您将获得word的
链接1

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); }
    }
}

@Marshal我认为发布一个简短的XML文件可能是一个好主意,该文件导致代码失败。请提供XML以及您遇到的异常/问题。rxml()的完整代码:)我很困惑-您的示例代码设置的是
按钮/word/link1
按钮/word/link2
节点的值,而不是获取它们-为什么?您还应该提供一个简短的XML示例和有关抛出的异常的详细信息。由于这个问题,它都位于按钮中。我想用标题“MLE Dash”来设置它,但是如果我这样做了,我就无法读取URL或文本。现在我对word、adobe等元素也有同样的问题。请在这里发布XML的摘录。因此提供了代码格式。
buttons["word"][1].Link = "new value";