【问题标题】:Xml filing issue?xml文件问题?
【发布时间】:2013-12-14 12:25:26
【问题描述】:

我在 xml 文件中输入数据,但它没有以正确的方式进行,因为当我检索我的数据时,它只检索部分数据。

你能帮我看看如何输入数据,检索整个数据并比较我在文本框中输入的特定数据吗????

这是我的代码: 这是用于输入数据的。:

string curFile = @"D:\5 Semester\Project\VP Project\VP Project\bin\Debug\New Entry.xml";
            string s1 = textBox1.Text;
            string s2 = textBox2.Text;
            string s3 = comboBox3.Text;
            string s4 = comboBox1.Text;
            string s5 = comboBox2.Text;


        if (File.Exists(curFile) && curFile!=null)
        {
            try
            {
                var library = XElement.Load("New Entry.xml");
                library.Add(new XAttribute("FirstName",s1));
                library.Add(new XElement("First", new XAttribute("Name", s1)));
                library.Add(new XElement("Last", new XAttribute("Name", s2)));
                library.Add(new XElement("Profession", new XAttribute("Type", s3)));
                library.Add(new XElement("Department", new XAttribute("Degree", s4)));
                library.Add(new XElement("Semester", new XAttribute("No", s5)));
                library.Save("New Entry.xml");
                MessageBox.Show("Data Appended!");
            }
            catch (Exception)
            {
                MessageBox.Show("Error");
            }
        }
        else if (!(File.Exists(curFile)))
        {
            using (XmlWriter writer = XmlWriter.Create("New Entry.xml"))
            {
                writer.WriteStartDocument();
                writer.WriteStartElement("New_Entry");
                writer.WriteElementString("FirstName", s1);
                writer.WriteElementString("LastName", s2);
                writer.WriteElementString("Profession", s3);
                writer.WriteElementString("Department", s4);
                writer.WriteElementString("Semester", s5);
                writer.WriteEndElement();
                writer.WriteEndDocument();
                writer.Close();
                MessageBox.Show("File Created!");
            }
        }
        else
        {
            MessageBox.Show("File Cannot be Created!");
        }

这是用于检索数据:

XPathNavigator nav;
        XPathDocument docNav;
        docNav = new XPathDocument(@"D:\5 Semester\Project\VP Project\VP Project\bin\Debug\New Entry.xml");
        nav = docNav.CreateNavigator();
        nav.MoveToRoot();
        nav.MoveToFirstChild();
        do
        {
            //Find the first element.
            if (nav.NodeType == XPathNodeType.Element)
            {

                //Determine whether children exist.
                if (nav.HasChildren == true)
                {
                    //Move to the first child.
                    nav.MoveToFirstChild();

                    //Loop through all the children.
                    listBox1.Items.Add("All Record ");
                    do
                    {
                        //Display the data.
                        listBox1.Show();
                        listBox1.Items.Add(nav.Value);
                    }
                    while (nav.MoveToNext());
                }
            }
        }
        while (nav.MoveToNext());
    }

但它不是检索整个数据...。我如何比较存储在 xml 中的数据。我在文本框和 xml 文件数据中输入的数据如果匹配则显示以下数据。

【问题讨论】:

    标签: c# xml linq-to-xml


    【解决方案1】:

    首先:如果 XML 文件与您的 .exe 应用程序位于同一文件夹中,则无需完整路径,只需使用 ("file.xml"); 对于处理 xml 文件,最好和最简单的方法是这样的: 您将需要构建一个类,以便您可以定义您的字段、属性并构建您的构造函数..

            List<yourclass> data= new List<yourclass>();
            XmlDocument doc = new XmlDocument();
            doc.Load("file.xml");
                        XmlNodeList list= doc["your root"].ChildNodes;
                        foreach (XmlNode node in list)
                        {
        //get all child nodes inner text
                            string[] info = { clt["info1"].InnerText, clt["info2"].InnerText, clt["info3"].InnerText, clt["info4"].InnerText, aslong as it is };
    //ad all info to your class list
                            data.Add(new client(info[0], info[1], info[2], info[3], info[4], info[5], info[6], info[7], info[8],info[9]));
                        }
                    return data;
    

    为了保存:

    您需要像以前一样加载 XML 文档,然后创建新节点并填充它们,然后获取您需要附加的节点或创建新节点并将其附加到根节点..

    doc.Load("file.xml");
    XmlNode any= doc.CreateElement("elementname");
    any.InnerText = textsource.ToString();
    targetnode.AppendChild(any);
    rootnode.AppendChild(targetnode);
    doc.Save("file.xml");
    

    【讨论】:

    • 请我是一个初学者告诉我我告诉你的代码的确切代码。告诉我上面代码的确切语法!!!
    • 我在 doc 和 targetnode 上也有错误。如何消除这些错误。
    • @John .. 非常感谢 -1,至少我试图解释如何将 OOP 与 XML 文件一起使用,这将节省大量时间和大量代码行.. 你解释了什么?!
    • 我在 doc 和 targetnode 上有错误,如何克服这个错误??
    • 由于 OP 使用的是 LINK to XML,因此您使用 XmlDocument 的建议没有多大意义。随意发布使用XDocument的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 2020-05-14
    • 2017-08-08
    • 2010-11-13
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多