public class MyXML
{
public string MyPath;
//XML文件路径
private XmlDocument XmlDoc;
private XmlNodeList MyList;
//创建xml实体
public ArrayList MyArr_Get = new ArrayList();
//数组【存放当前xml的值】
public ArrayList MyArr_Set = new ArrayList();
//数组【存放要更替xml的值】
/*---------------初始化--------------------*/
public void Init()
{
MyArr_Get.Clear();
//数组1_初始化
MyArr_Set.Clear();
//数组2_初始化
//MyArr_Temp.Clear();
XmlDoc = new XmlDocument();
//初始化一个xml实例
XmlDoc.Load(MyPath);
//载入文件
XmlElement root = XmlDoc.DocumentElement;
MyList = root.ChildNodes;
//指向最顶层的节点
}
public void GetDatas()
{
FunGetDatasFromXML(MyList);
//return MyArr_Get;
}
public void SetDatas()
{
FunSetDatasFromXML(MyList);
XmlDoc.Save(MyPath);
}
/*--------------递归函数【逐层获取各子节点数据】----------------*/
private void FunGetDatasFromXML(XmlNodeList myXmlNodeList)
{
foreach (XmlNode node in myXmlNodeList)
{
if (node.NodeType == XmlNodeType.Element)
FunGetDatasFromXML(node.ChildNodes);
else
MyArr_Get.Add(node.Value);
}
}
/*--------------递归函数【逐层替换各子节点数据】----------------*/
private void FunSetDatasFromXML(XmlNodeList myXmlNodeList)
{
foreach (XmlNode node in myXmlNodeList)
{
if (node.NodeType == XmlNodeType.Element)
{
FunSetDatasFromXML(node.ChildNodes);
}
else
{
node.InnerText = MyArr_Set[0].ToString();
MyArr_Set.RemoveAt(0);
}
}
}
}
想法:
【读值】遍历整个节点,每次获取节点,判断节点的值【node.Value】是否是null,如果是null,说明其下层还存在<>xx</>,并在该节点进行下级遍历;否则此节点就是纯数据并无下层,然后切换到同层下一个节点进行判断;
【写值】遍历整个节点,每次获取节点,判断节点的值【node.NodeType】是否是Element类型,如果是,说明其下层还存在<>xx</>,并在该节点进行下级遍历;否则此节点就是纯数据并无下层,然后切换到同层下一个节点进行判断
【核心】把当前的【node.NodeType】作为判断下级存在<>xx</>的依据