C# 嵌套元素和脚本

C# 嵌套元素和脚本,c#,scripting,xml-parsing,C#,Scripting,Xml Parsing,我目前正在尝试创建一个解析XML文件并根据文本中的元素和标记更改文本的应用程序(用c#) 例如: <conversation> <message from=Bob> <typewriter dif=0.5> <Text> Bob: Hello <replace>Country<with>World</with>

我目前正在尝试创建一个解析XML文件并根据文本中的元素和标记更改文本的应用程序(用c#)

例如:

 <conversation>
   <message from=Bob>
       <typewriter dif=0.5>
           <Text>               
               Bob: Hello <replace>Country<with>World</with></replace>`
           </Text>
      </typewriter>
   <message>
</conversation>

鲍勃:你好,乡村世界`
输出如下所示:

它开始写“Bob:Hello Country”,就像一台旧打字机一样(一个字母接一个字母),当写“Country”时,它将删除该单词,并开始写World。所以最终的输出是“鲍勃:你好,世界”

下面是我的问题: 解析XML文件后,什么是存储数据的好方法,以便程序知道哪些元素包含哪些元素?(例如,信息包含打字机)

让程序识别文本元素内部的脚本标记。我该怎么做?如何让它像示例一样工作

这里我不是要完整的代码,只是一些指向正确方向的指针。我还是一个编程初学者,所以我想学习


我不知道要搜索什么,因此如果类似的内容已经发布,我很抱歉。

在大多数情况下,您可以用XML表示数据:

public class Conversation 
{
    public IEnumerable<Message> Messages {get;set;}
}

public class Message
{
    public string From {get;set;}
    public IEnumerable<TypeWriter> TypeWriters {get;set;}
}
公共课堂对话
{
公共IEnumerable消息{get;set;}
}
公共类消息
{
来自{get;set;}的公共字符串
公用IEnumerable打字机{get;set;}
}
。。。但如果XML允许以任何顺序使用不同的节点类型(例如,打字机和计算机可以互换),则需要对此进行调整

当涉及到文本节点时,文本和其他节点都应该被视为一种操作

public class TypewriterText
{
    public IEnumerable<ITypewriterTextAction> TextActions {get;set;}
}

public enum TypeWriterTextActionType
{
    Plain,
    Replace
}

public interface ITypewriterTextAction
{
    TypeWriterTextActionType ActionType {get;}
}

public class PlainTypeWriterTextAction : ITypewriterTextAction
{
    public TypeWriterTextActionType ActionType 
    {
        get {return TypeWriterTextActionType.Plain;
    }
    public string TextToWrite {get;set;}
}

public class ReplaceTypeWriterTextAction : ITypewriterTextAction
{
    public TypeWriterTextActionType ActionType 
    {
        get {return TypeWriterTextActionType.Replace;
    }
    public string OriginalText {get;set;}
    public string ReplacementText {get;set;}
}
公共类TypewriterText
{
公共IEnumerable TextActions{get;set;}
}
公共枚举TypeWriterTextActionType
{
平原
代替
}
公共接口ITypewriterTextAction
{
TypeWriterTextActionType操作类型{get;}
}
公共类PlainTypeWriterTextAction:ITypewriterTextAction
{
公共TypeWriterTextActionType操作类型
{
获取{return TypeWriterTextActionType.Plain;
}
公共字符串TextToWrite{get;set;}
}
公共类ReplaceTypeWriterTextAction:ITypewriterTextAction
{
公共TypeWriterTextActionType操作类型
{
获取{返回TypeWriterTextActionType.Replace;
}
公共字符串原始文本{get;set;}
公共字符串替换文本{get;set;}
}

使用LINQ to XML之类的技术将XML解析为这些对象,然后编写可以获取这些对象并执行适当操作的方法。例如,您需要一个类知道如何执行普通动画,另一个类可以执行替换动画,并且可以在每个操作的Type属性上使用switch语句确定要使用哪个动画类。

这个应用程序会直接写入信息然后替换它吗?你能解释一下为什么这是必要的吗?我想,通过更多关于你正在尝试做的事情的信息,我们可以更有效地帮助你。是的,它会像我说的那样编写。简单地说,它应该模仿一个人编写动画即时消息。根据不同的元素和标记,它应该执行不同的操作。换句话说,它正在基于提供的XML呈现动画。Thx要获得帮助,我将尝试一下。可能很快就会回来:)