C#XMLプロファイル読み書きクラス(プログラム構成保存用)
3340 ワード
C#XMLプロファイル読み書きクラス(プログラム構成保存用)
2014-08-27
分類:プログラミング技術
読み取り(3930)
コメント(2)
以前からINI方式でプログラムの配置保存をしていたので、便利でした.
拡張性を向上させるために、今日はxmlでプロファイルの読み書きを行います.
コールモード
//ファイルパスを初期化して指定する
XmlConfigUtil util = new XmlConfigUtil("C:\\1.xml");
//保存する値およびパス(System、Menu.....いずれもパス)params string[]を書き込む方法util.Write("testValue", "System", "Menu");
//システム/Menuの値を読み込む
Console.WriteLine(util.Read("System", "Menu"));
ファイルパスが存在する場合は正常に読み込み、存在しない場合は自動的に作成されます.
ソースコード
以下はXmlConfigUtilのソースコードです.ここでは随時更新します.
///
//説明:プログラム構成保存ヘルプクラスfor XML //更新:http://www.wxzzz.com/1352.html
///
public class XmlConfigUtil
{
#regionグローバル変数 string _xmlPath;//ファイル所在経路 #endregion
#regionコンストラクション関数 ///
//構成を初期化
///
//配置所在経路 public XmlConfigUtil(string xmlPath)
{
_xmlPath = Path.GetFullPath(xmlPath);
}
#endregion
#region共有方法 ///
//書き込み構成 ///
//書き込み値//ノード public void Write(string value, params string[] nodes)
{
//初期化xml XmlDocument xmlDoc = new XmlDocument();
if (File.Exists(_xmlPath))
xmlDoc.Load(_xmlPath);
else
xmlDoc.LoadXml("");
XmlNode xmlRoot = xmlDoc.ChildNodes[0];
//ノードの追加、編集
string xpath = string.Join("/", nodes);
XmlNode node = xmlDoc.SelectSingleNode(xpath);
if(node==null)/新規ノード {
node = makeXPath(xmlDoc, xmlRoot, xpath);
}
node.InnerText = value;
//保存 xmlDoc.Save(_xmlPath);
}
///
//読み出し構成 ///
//ノード ///
public string Read(params string[] nodes)
{
XmlDocument xmlDoc = new XmlDocument();
if (File.Exists(_xmlPath) == false)
return null;
else
xmlDoc.Load(_xmlPath);
string xpath = string.Join("/", nodes);
XmlNode node = xmlDoc.SelectSingleNode("/XmlConfig/"+ xpath);
if (node == null)
return null;
return node.InnerText;
}
#endregion
#regionプライベートメソッド//再帰xpathによるノード作成 static private XmlNode makeXPath(XmlDocument doc, XmlNode parent, string xpath)
{
//XPathで次のノードの名前をつかむ;親が空の場合はを返します.
string[] partsOfXPath = xpath.Trim('/').Split('/');
string nextNodeInXPath = partsOfXPath.First();
if (string.IsNullOrEmpty(nextNodeInXPath))
return parent;
//名前からノードを取得または作成する
XmlNode node = parent.SelectSingleNode(nextNodeInXPath);
if (node == null)
node = parent.AppendChild(doc.CreateElement(nextNodeInXPath));
//XPath式と再帰剰余として追加されたアレイ
string rest = String.Join("/", partsOfXPath.Skip(1).ToArray());
return makeXPath(doc, node, rest);
}
#endregion
}
2014-08-27
分類:プログラミング技術
読み取り(3930)
コメント(2)
以前からINI方式でプログラムの配置保存をしていたので、便利でした.
拡張性を向上させるために、今日はxmlでプロファイルの読み書きを行います.
コールモード
//ファイルパスを初期化して指定する
XmlConfigUtil util = new XmlConfigUtil("C:\\1.xml");
//保存する値およびパス(System、Menu.....いずれもパス)params string[]を書き込む方法util.Write("testValue", "System", "Menu");
//システム/Menuの値を読み込む
Console.WriteLine(util.Read("System", "Menu"));
ファイルパスが存在する場合は正常に読み込み、存在しない場合は自動的に作成されます.
ソースコード
以下はXmlConfigUtilのソースコードです.ここでは随時更新します.
///
//説明:プログラム構成保存ヘルプクラスfor XML //更新:http://www.wxzzz.com/1352.html
///
public class XmlConfigUtil
{
#regionグローバル変数 string _xmlPath;//ファイル所在経路 #endregion
#regionコンストラクション関数 ///
//構成を初期化
///
//配置所在経路 public XmlConfigUtil(string xmlPath)
{
_xmlPath = Path.GetFullPath(xmlPath);
}
#endregion
#region共有方法 ///
//書き込み構成 ///
//書き込み値//ノード public void Write(string value, params string[] nodes)
{
//初期化xml XmlDocument xmlDoc = new XmlDocument();
if (File.Exists(_xmlPath))
xmlDoc.Load(_xmlPath);
else
xmlDoc.LoadXml("");
XmlNode xmlRoot = xmlDoc.ChildNodes[0];
//ノードの追加、編集
string xpath = string.Join("/", nodes);
XmlNode node = xmlDoc.SelectSingleNode(xpath);
if(node==null)/新規ノード {
node = makeXPath(xmlDoc, xmlRoot, xpath);
}
node.InnerText = value;
//保存 xmlDoc.Save(_xmlPath);
}
///
//読み出し構成 ///
//ノード ///
public string Read(params string[] nodes)
{
XmlDocument xmlDoc = new XmlDocument();
if (File.Exists(_xmlPath) == false)
return null;
else
xmlDoc.Load(_xmlPath);
string xpath = string.Join("/", nodes);
XmlNode node = xmlDoc.SelectSingleNode("/XmlConfig/"+ xpath);
if (node == null)
return null;
return node.InnerText;
}
#endregion
#regionプライベートメソッド//再帰xpathによるノード作成 static private XmlNode makeXPath(XmlDocument doc, XmlNode parent, string xpath)
{
//XPathで次のノードの名前をつかむ;親が空の場合はを返します.
string[] partsOfXPath = xpath.Trim('/').Split('/');
string nextNodeInXPath = partsOfXPath.First();
if (string.IsNullOrEmpty(nextNodeInXPath))
return parent;
//名前からノードを取得または作成する
XmlNode node = parent.SelectSingleNode(nextNodeInXPath);
if (node == null)
node = parent.AppendChild(doc.CreateElement(nextNodeInXPath));
//XPath式と再帰剰余として追加されたアレイ
string rest = String.Join("/", partsOfXPath.Skip(1).ToArray());
return makeXPath(doc, node, rest);
}
#endregion
}