嵌套元素和脚本

时间:2010-10-28 17:02:21

标签: c# scripting xml-parsing

我正在尝试创建和应用程序(在c#中)解析XML文件,然后根据文本中的元素和标记更改文本。

示例:

 <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。所以最终输出将是“Bob:Hello World”

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

让程序识别Text元素中的脚本标记。我怎么做?以及如何让它像示例一样工作?

我不是在这里要求完成的代码,只是在正确方向上的一些指示。我还是编程的初学者,所以我想学习。

我不知道该搜索什么,所以如果这样的话已经发布,那么对不起。

1 个答案:

答案 0 :(得分:1)

在大多数情况下,您可以按照XML中表示的方式表示您的数据:

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

public class Message
{
    public string From {get;set;}
    public IEnumerable<TypeWriter> TypeWriters {get;set;}
}

...等等但是如果你想以任何顺序允许不同的节点类型(例如打字机和计算机可以互换),你需要调整它。

当涉及到Text节点时,文字文本和其他节点都应被视为一种行为。

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;}
}

使用LINQ to XML等技术将XML解析为这些对象,然后编写可以获取这些对象并执行相应操作的方法。例如,您需要一个知道如何进行Plain动画的类和另一个可以执行Replace动画的类,并且可以对每个动作的Type属性使用switch语句来确定要使用的动画类。