使用 cs 类更改解析后的 XML 中的值莫比迪克

问题描述 投票:0回答:1

我有一个名为

xml
Data.xml
文件,其内容为:

<Data>
    <Books>
        <Book>
            <Title>Moby Dick</Title>    
            <Author>Herman Melville</Author>
        </Book>
        <Book>
            <Title>Tom Sawyer</Title>   
            <Author>Mark Twain</Author>
        </Book>
    </Books>
</Data>

我用

cs
类解析这些数据:

public class Data
{
    private Content[] books;      
    [System.Xml.Serialization.XmlArrayItemAttribute("Book", IsNullable = false)]
    public Content[] Books
    {
        get { return this.books; }
        set { this.books = value; }
    }
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public partial class Content
    {
        private string title;
        public string Title
        {
            get { return this.title; }
            set { this.title = value; }
        }
        private string author;
        public string Author
        {
            get { return this.author; }
            set { this.author = value; }
        }
    }
}

这个效果很好。我毫无困难地声明类并反序列化数据:

Data FileContent = new Data();
XmlTextReader Reader = new XmlTextReader("Data.xml");
XmlSerializer Serializer = new XmlSerializer(typeof(Data));
FileContent = (Data)Serializador.Deserialize(Reader);
Reader.Close();

很抱歉在这篇文章中放置了这么多工作代码。我现在的目标是更改一些值或向

FileContent
添加新值。如果我能做到这一点,那么用新值更新
xml
文件就会很容易。然而我在做这件事时遇到了一些困难。

例如,假设我想将第一个标题从

Herman Melville
更改为
Billy Budd
。我尝试了代码:

FileContent.Books.SetValue("Billy Budd", 0);

这没有意义,因为我没有索引我想要的元素

Set
,并且相当足够,当我运行这段代码时,我收到了相关的运行时错误。然而,在我看来有意义的代码:

FileContent.Books[0].SetValue("Billy Budd", "Title");

或:

FileContent.Books[0].Title.SetValue("Billy Budd");

不起作用。 如何更改

FileContent
上的值? 您还可以帮我向
FileContent
添加新数据吗?例如,我如何添加一本新书:来自
War and Peace
Leo Tolstoy

谢谢

c# arrays xml
1个回答
0
投票

您需要修改内存中的项目,然后将其重新序列化回xml文件。

所以

FileContent.Books[0].Title = "Billy Bud"
修改了值,那么就需要编写代码将其写回到xml文件中。可能使用
XMLTextWriter

添加书籍可以通过使用当前书籍的副本和额外的新书籍创建一个新数组来完成。一个可能更好的替代方案是使用

List<Content>
类型来表示
Data.books
,而不是动态的
Content[]
。然后您可以添加一本新书,例如
FileContent.Books.Add(new Data.Content(){Author = "Leo Tolstoy", Title = "War and Peace"});

© www.soinside.com 2019 - 2024. All rights reserved.