正在处理一个XML,每一个有子节点的XmlElement 就会创建一个对象,整个程序形成树形结构。在树干或者树枝节点修改后,怎么同步一些信息到根部对象中。
public class Root
{
private List<int> counts = new List<int>(); //字段:记录子节点数量记录
private XmlDocument xmlDocument; //文件对象
private List<Node> nodes; //子节点对象
/// <summary>
/// (当前对象为爷爷),子节点(儿子)对象的 子节点(孙子)的数量列表
/// </summary>
public List<int> Counts { get { return counts; } }
public Root(string xmlPath)
{
//创建文件对象
xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xmlPath);
//循环创建子节点对象,并记录子节点信息
foreach (XmlNode item in xmlDocument.ChildNodes)
{
Node node = new Node(item);
this.nodes.Add(node);
this.counts.Add(item.ChildNodes.Count); //目前假如这里保存的是子节点对象的 “子节点”数量
}
}
}
/// <summary>
/// 子节点对象
/// </summary>
public class Node
{
private XmlNode xmlNode;
public Node(XmlNode xmlNode)
{
this.xmlNode = xmlNode;
}
public void Edit()
{
XmlElement xmlElement = this.xmlNode.OwnerDocument.CreateElement("创建子节点"); //创建节点
this.xmlNode.AppendChild(xmlElement); //添加为当前对象的子节点
/*
* 如果在这里修改了this.xmlNode。因为this.xmlNode是一个对象,修改可以直接变动了引用着C# (Root类)的xmlDocument对象内容。
*
* 需求:怎么在这里修改后才能自动同步Root类中的counts列表。由于其他对象会获取经常需要获取。
* 并且Node并是不最基础的节点
*
* 求教方法或者思路。有简单的示例代码更好
*/
}
}
没有报错
想过去在node类中设置一个委托或者事件,在root中绑定,但我需要创建N多个类似的node类,并且还是一个套一个。这样就太麻烦了。
也想过类似word那种,在XmlElement 设置一个属性,检查属性值,判断是否修改过,但这样就需要定时检查,也不太合理。
同步修改或者类似的效果
大家都没遇到这种问题吗,怎么都没人讨论下啊。
我今天在想如果我定义一个静态类,Root每100毫秒扫描下静态类,看是否存在数据。存在则重新计算。修改对象的Node类每次再修改前也判断一次静态类是否存在数据,存在则等待100毫秒,不存在则直接修改,并修改静态类。
这样目前貌似能解决问题,就是效率低下。