Чтение из XML-файла C # - PullRequest
       3

Чтение из XML-файла C #

0 голосов
/ 20 февраля 2012

Я пытаюсь прочитать документ 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;

        }

    }

XML-файл http://pastebin.com/i5vVt0GV

1 Ответ

1 голос
/ 20 февраля 2012

Чтобы облегчить доступ к данным, вы должны создать классы для доступа к данным. Разбивая проблему на разные уровни, она облегчает понимание, отладку и поддержание актуальности. Я пошел дальше и создал пример этого, используя этот файл расширений .

Чтобы использовать следующее, вы получите 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, я добавил сеттеры: они будут установлены таким же образом. Затем нужно будет вызвать buttons.Save(file), чтобы сохранить изменения в файле.

buttons["word"][1].Link = "new value";
...