c#操作xml文件
2009-04-23 11:31
483 查看
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace XMLTest
{
public class CommXml
{
public XmlDocument xmlDoc = new XmlDocument();
public void getXmlDoc(string strXml)
{
xmlDoc.LoadXml(strXml);
}
public CommXml(string strXml)
{
xmlDoc.LoadXml(strXml);
}
/// <summary>
/// 从父节点开始,中间用逗号隔开
/// </summary>
/// <param name="strNode">节点名称</param>
/// <param name="strValue">节点值</param>
public void setNodeValue(string strNode, string strValue)
{
XmlNode xn = getNode(strNode);
xn.InnerText = strValue;
}
/// <summary>
/// 根据逗号相隔节点名称取得当前节点
/// </summary>
/// <param name="strNode"></param>
/// <returns></returns>
private XmlNode getNode(string strNode)
{
XmlNode xn = null;
string[] strNodeNameArr = strNode.Trim(',').Split(',');
foreach (string strNodeName in strNodeNameArr)
{
if (xn == null)
{
if (strNodeName.IndexOf("*") > 0)
{
xn = getNodeListNode(strNodeName, xmlDoc);
}
else
{
xn = xmlDoc.SelectSingleNode(strNodeName);
}
}
else
{
if (strNodeName.IndexOf("*") > 0)
{
xn = getNodeListNode(strNodeName, xn);
}
else
{
xn = xn.SelectSingleNode(strNodeName);
}
if (xn == null) throw new Exception("节点" + strNodeName + "不存在.");
}
}
return xn;
}
/// <summary>
/// 节点列表中单个节点取得
/// </summary>
/// <param name="strNode">节点列表节点名称:例;nodename*0 指节点名称是nodename的节点数组下标是0的节点取得</param>
/// <param name="fatherXn">当前节点的父亲节点</param>
/// <returns></returns>
private XmlNode getNodeListNode(string strNode, XmlNode fatherXn)
{
XmlNode xn = null;
string[] strNodeListNameAndArrNum = strNode.Split('*');
XmlNodeList xnList = fatherXn.SelectNodes(strNodeListNameAndArrNum[0]);
xn = xnList.Item(Convert.ToInt32(strNodeListNameAndArrNum[1]));
return xn;
}
/// <summary>
/// 节点属性值设定
/// </summary>
/// <param name="strNode">从父节点开始,中间用逗号隔开</param>
/// <param name="strAttributeName">节点名称</param>
/// <param name="strValue">节点值</param>
public void setNodeAttributes(string strNode, string strAttributeName, string strValue)
{
XmlNode xn = getNode(strNode);
try
{
xn.Attributes[strAttributeName].Value = strValue;
}
catch
{
throw new Exception("节点" + strNode + "不存在属性[" + strAttributeName + "].");
}
}
/// <summary>
/// 节点属性值取得
/// </summary>
/// <param name="strNode">从父节点开始,中间用逗号隔开</param>
/// <param name="strAttributeName">节点名称</param>
/// <returns></returns>
public string getNodeAributeValue(string strNode, string strAttributeName)
{
try
{
XmlNode xn = getNode(strNode);
return xn.Attributes[strAttributeName].Value;
}
catch
{
throw new Exception("节点" + strNode + "不存在属性[" + strAttributeName + "].");
}
}
/// <summary>
/// 数组也表数据节点属性值设定
/// </summary>
/// <param name="strNode">从父节点开始,中间用逗号隔开</param>
/// <param name="strAttributeName">节点名称</param>
/// <param name="strValue">节点值</param>
/// <param name="arrNum">数组节点下标,从0开始</param>
public void setNodeListAttributes(string strNode, string strAttributeName, string strValue, int arrNum)
{
}
public void test()
{
string strXml = @" <battleArmies>
<battleArmy side=""1"">
<battleTroops>
<battleTroop position=""0"">
<battleTeams>
<battleTeam id=""1000"" x=""15"" y=""7"" hp=""80.0"" amount=""8"">
<soldierConfig name=""老虎"" type=""LAO_HU"" category=""2"" attack=""18.0"" defence=""15.0"" hp=""10.0"" moveSpeed=""10.0"" attackScope=""1.0"" attackSpeed=""15.0"" destroy=""null"" critical=""null"" criticalRate=""null"">
<attackAddon key_0=""2.83"" key_1=""1.0"" key_2=""1.0"" key_3=""1.0"" key_4=""1.0"" />
</soldierConfig>
<soldierAddonConfig name=""老虎"" type=""LAO_HU"" category=""2"" attack=""18.18"" defence=""15.15"" hp=""10.0"" moveSpeed=""10.0"" attackScope=""1.0"" attackSpeed=""15.0"" destroy=""null"" critical=""null"" criticalRate=""null"">
<attackAddon key_0=""2.83"" key_1=""1.0"" key_2=""1.0"" key_3=""1.0"" key_4=""1.0"" />
</soldierAddonConfig>
</battleTeam>
</battleTeams>
</battleTroop>
</battleTroops>
</battleArmy>
</battleArmies>
";
CommXml xml = new CommXml(strXml);
xml.setNodeAttributes("battleArmies,battleArmy,battleTroops,battleTroop,battleTeams,battleTeam*0,soldierConfig*0,attackAddon", "key_0", "2999");
string strNodeValue = xml.getNodeAributeValue("battleArmies,battleArmy,battleTroops,battleTroop,battleTeams,battleTeam*0,soldierConfig*0,attackAddon", "key_0");
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace XMLTest
{
public class CommXml
{
public XmlDocument xmlDoc = new XmlDocument();
public void getXmlDoc(string strXml)
{
xmlDoc.LoadXml(strXml);
}
public CommXml(string strXml)
{
xmlDoc.LoadXml(strXml);
}
/// <summary>
/// 从父节点开始,中间用逗号隔开
/// </summary>
/// <param name="strNode">节点名称</param>
/// <param name="strValue">节点值</param>
public void setNodeValue(string strNode, string strValue)
{
XmlNode xn = getNode(strNode);
xn.InnerText = strValue;
}
/// <summary>
/// 根据逗号相隔节点名称取得当前节点
/// </summary>
/// <param name="strNode"></param>
/// <returns></returns>
private XmlNode getNode(string strNode)
{
XmlNode xn = null;
string[] strNodeNameArr = strNode.Trim(',').Split(',');
foreach (string strNodeName in strNodeNameArr)
{
if (xn == null)
{
if (strNodeName.IndexOf("*") > 0)
{
xn = getNodeListNode(strNodeName, xmlDoc);
}
else
{
xn = xmlDoc.SelectSingleNode(strNodeName);
}
}
else
{
if (strNodeName.IndexOf("*") > 0)
{
xn = getNodeListNode(strNodeName, xn);
}
else
{
xn = xn.SelectSingleNode(strNodeName);
}
if (xn == null) throw new Exception("节点" + strNodeName + "不存在.");
}
}
return xn;
}
/// <summary>
/// 节点列表中单个节点取得
/// </summary>
/// <param name="strNode">节点列表节点名称:例;nodename*0 指节点名称是nodename的节点数组下标是0的节点取得</param>
/// <param name="fatherXn">当前节点的父亲节点</param>
/// <returns></returns>
private XmlNode getNodeListNode(string strNode, XmlNode fatherXn)
{
XmlNode xn = null;
string[] strNodeListNameAndArrNum = strNode.Split('*');
XmlNodeList xnList = fatherXn.SelectNodes(strNodeListNameAndArrNum[0]);
xn = xnList.Item(Convert.ToInt32(strNodeListNameAndArrNum[1]));
return xn;
}
/// <summary>
/// 节点属性值设定
/// </summary>
/// <param name="strNode">从父节点开始,中间用逗号隔开</param>
/// <param name="strAttributeName">节点名称</param>
/// <param name="strValue">节点值</param>
public void setNodeAttributes(string strNode, string strAttributeName, string strValue)
{
XmlNode xn = getNode(strNode);
try
{
xn.Attributes[strAttributeName].Value = strValue;
}
catch
{
throw new Exception("节点" + strNode + "不存在属性[" + strAttributeName + "].");
}
}
/// <summary>
/// 节点属性值取得
/// </summary>
/// <param name="strNode">从父节点开始,中间用逗号隔开</param>
/// <param name="strAttributeName">节点名称</param>
/// <returns></returns>
public string getNodeAributeValue(string strNode, string strAttributeName)
{
try
{
XmlNode xn = getNode(strNode);
return xn.Attributes[strAttributeName].Value;
}
catch
{
throw new Exception("节点" + strNode + "不存在属性[" + strAttributeName + "].");
}
}
/// <summary>
/// 数组也表数据节点属性值设定
/// </summary>
/// <param name="strNode">从父节点开始,中间用逗号隔开</param>
/// <param name="strAttributeName">节点名称</param>
/// <param name="strValue">节点值</param>
/// <param name="arrNum">数组节点下标,从0开始</param>
public void setNodeListAttributes(string strNode, string strAttributeName, string strValue, int arrNum)
{
}
public void test()
{
string strXml = @" <battleArmies>
<battleArmy side=""1"">
<battleTroops>
<battleTroop position=""0"">
<battleTeams>
<battleTeam id=""1000"" x=""15"" y=""7"" hp=""80.0"" amount=""8"">
<soldierConfig name=""老虎"" type=""LAO_HU"" category=""2"" attack=""18.0"" defence=""15.0"" hp=""10.0"" moveSpeed=""10.0"" attackScope=""1.0"" attackSpeed=""15.0"" destroy=""null"" critical=""null"" criticalRate=""null"">
<attackAddon key_0=""2.83"" key_1=""1.0"" key_2=""1.0"" key_3=""1.0"" key_4=""1.0"" />
</soldierConfig>
<soldierAddonConfig name=""老虎"" type=""LAO_HU"" category=""2"" attack=""18.18"" defence=""15.15"" hp=""10.0"" moveSpeed=""10.0"" attackScope=""1.0"" attackSpeed=""15.0"" destroy=""null"" critical=""null"" criticalRate=""null"">
<attackAddon key_0=""2.83"" key_1=""1.0"" key_2=""1.0"" key_3=""1.0"" key_4=""1.0"" />
</soldierAddonConfig>
</battleTeam>
</battleTeams>
</battleTroop>
</battleTroops>
</battleArmy>
</battleArmies>
";
CommXml xml = new CommXml(strXml);
xml.setNodeAttributes("battleArmies,battleArmy,battleTroops,battleTroop,battleTeams,battleTeam*0,soldierConfig*0,attackAddon", "key_0", "2999");
string strNodeValue = xml.getNodeAributeValue("battleArmies,battleArmy,battleTroops,battleTroop,battleTeams,battleTeam*0,soldierConfig*0,attackAddon", "key_0");
}
}
}
相关文章推荐
- c# 操作xml文件
- C# 用Linq的方式实现对Xml文件的基本操作(创建xml文件、增删改查xml文件节点信息)
- c# winform app.config xml 配置文件 读写操作
- [C#]XmlDocument_修改xml文件操作.
- C# 用Linq的方式实现对Xml文件的基本操作(创建xml文件、增删改查xml文件节点信息)
- C# 操作非标准的xml文件
- c# 文件操作 txt、xml、ini
- C# 用Linq的方式实现对Xml文件的基本操作(创建xml文件、增删改查xml文件节点信息)
- c#对xml文件常用操作
- C#操作XML配置文件
- c#环境XML文件创建、修改、删除、查找相关操作
- c#操作web.config/xml 文件
- (C#)XML文件操作3
- C#操作XML文件
- C#操作XML配置文件
- C# 利用自带xsd.exe工具操作XML-如通过XML生成xsd文件
- C#操作XML配置文件
- C# 用Linq的方式实现对Xml文件的基本操作(创建xml文件、增删改查xml文件节点信息)zz
- C# 用Linq的方式实现对Xml文件的基本操作(创建xml文件、增删改查xml文件节点信息)
- c#操作xml文件之二