Xml添加删除和操作数据

时间:2011-12-02 13:01:51

标签: c# xml

我遇到了与c#集成的xml,使用UI,我可以按照我需要的方式创建文档,包括保存/加载/显示功能,我缺少的是重新加载和现有xml文件的能力“Books.xml”添加或删除条目并使用相同名称保存。我的代码是:

    XmlTextWriter Writer = new XmlTextWriter ("NewDoc.xml", Encoding.UTF8);

    Writer.WriteStartDocument();

    Writer.WriteStartElement("SAVED");

    Writer.WriteStartElement("TITLE");
    Writer.WriteString(textBox2.Text);
    Writer.WriteEndElement();//TITLE

    foreach (string item in listBox1.Items)
    {
        Writer.WriteStartElement("ITEM");
        Writer.WriteString(item);
        Writer.WriteEndElement();//ITEM
    }

    Writer.WriteEndElement();//SAVED

    Writer.WriteEndDocument();

    Writer.Close();

我知道我可能不是很清楚,但我是一个完全的新手,我现在只做了3个月。

<?xml version="1.0" encoding="utf-8"?>
<Books>
  <ID1>
    <TITLE>Harry Potter
</TITLE>
    <AUTHOR>JK Rowling
</AUTHOR>
    <PUBLISHED>1995 
</PUBLISHED>
    <PUBLISHERS>Bloomberg,
</PUBLISHERS>
  </ID1>
  <ID2>
    <TITLE>Disc World
</TITLE>
    <AUTHOR>Terry Pratchet
</AUTHOR>
    <PUBLISHED>1990
</PUBLISHED>
    <PUBLISHERS>ETC
</PUBLISHERS>
  </ID2>
  <ID3>
    <TITLE>IT
</TITLE>
    <AUTHOR>Stephen King
</AUTHOR>
    <PUBLISHED>1999
</PUBLISHED>
    <PUBLISHERS>ETC
</PUBLISHERS>
  </ID3>
</Books>

这是xml代码。

2 个答案:

答案 0 :(得分:2)

我建议查看XDocument类,这样可以更轻松地处理XML文件。没有XML就很难给出一个样本,但是看一下这个答案,看看如何做到这一点:

Easiest way to add xml a node with a bunch of children nodes in .Net?

如果您发布一些示例XML,我们可以为您提供一些代码。基本思路是使用XDocument.Load(filename)然后XElement.Add(...)插入新元素。

<强>更新 此代码将从文件加载XML,添加一些元素,并保存到其他文件。它可能不是您尝试添加的XML,但应该足以让您前进。如果需要,您也可以保存回原始文件(我保存到foo2.xml,所以我没有覆盖我的测试文件)。

你可以看到我用一个字符串数组替换了listbox1.Items - 你应该能够交换这些行并得到你想要的。

    private static void Main()
    {
        var xdoc = XDocument.Load(@"C:\temp\foo.xml");
        var itemsToAdd = new[] { "item1", "item2", "item3" };
        // var itemsToAdd = listBox1.Items;
        xdoc.Root.Add(
            new XElement("SAVED",
                new XElement("TITLE",
                    itemsToAdd.Select(e => new XElement(e)))));
        xdoc.Save(@"c:\temp\foo2.xml");
    }

答案 1 :(得分:0)

C#是一种面向对象的语言,您会发现将问题分解为更小的部分(类,属性和方法)是有帮助的。

我建议你回答两个我回答的问题,我解释这个方法。

https://stackoverflow.com/a/5609126/353147

第二个问题可能只是在C#上进行了3个月,但如果你愿意,可以看一下:

https://stackoverflow.com/a/6802442/353147

类方法非常方便,可以快速操作值并快速读/写文件。

我会为你的方法(书籍和书籍)创建两个类。 Books类将读/写文件并包含书籍列表和从列表中添加/减去书籍的能力。

我看到的唯一困难是每本书都有不同的标签名称,但这不是一个巨大的问题,只是更难。

如果您的图书标记可以从<ID1>更改为<Book ID="1">以便更简单,那么您可以快速操作图书标记列表(因为它已在Linq中实现)。

我现在没有时间写一个完整的例子,但是如果你发现这两个链接很有意思并希望看到一个例子,我可以稍后写一个。在此留下评论。