我正在尝试创建和应用程序(在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元素中的脚本标记。我怎么做?以及如何让它像示例一样工作?
我不是在这里要求完成的代码,只是在正确方向上的一些指示。我还是编程的初学者,所以我想学习。
我不知道该搜索什么,所以如果这样的话已经发布,那么对不起。
答案 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语句来确定要使用的动画类。