2010-10-28 52 views
0

我目前正在尝试创建和解析XML文件的应用程序(在C#中),并根据文本中的元素和标记更改文本。嵌套的元素和脚本

例子:

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

输出应该是这样的:

它开始写“鲍勃:你好国家”就像一个老式打字机(函号),当“国家”被写入这将删除该字,并开始写世界。所以最终的输出将是“鲍勃:你好世界”

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

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

我没有要求在这里完成的代码,只是在正确的方向一些指针。我仍然是编程初学者,所以我想学习。

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

+0

这个应用程序是否会逐字写入信息然后替换它?你能解释为什么这是必要的吗?我想更多关于你正在努力做什么的信息,我们可以更有效地帮助你。 – wllmsaccnt 2010-10-28 17:13:42

+0

是的,它会按照我所说的来写。简而言之,它应该模仿一个人实时写信息。还取决于不同的元素和标签,它应该做不同的事情。 – Andreas 2010-10-28 17:20:01

+0

换句话说,它是基于提供的XML呈现动画。 – StriplingWarrior 2010-10-28 17:21:37

回答

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

...等等。但是,如果你的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;} 
} 

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

+0

Thx的帮助,我会尝试一下。可能很快会回到这里:) – Andreas 2010-10-28 17:55:31