string mMessageString = myShare.ReadSystemAttribute(Server.MapPath("../PubLang/"), "Message.xml", "Multi-Language", "ID", "picLimit6", ViewState["mHost"].ToString());
myShare.WebMessageBox(this.Page, mMessageString);
public string ReadSystemAttribute(string pXmlPath, string pXmlFileName, string pDsTableName, string pKeyFieldName, string pKeyString, string pValueFieldName)
{
string str = "";
DataSet set = new DataSet("CyberMall");
FileStream stream = new FileStream(pXmlPath + pXmlFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(0xfde9));
DataTable table = new DataTable(pDsTableName);
table.Columns.Add(pKeyFieldName, Type.GetType("System.String"));
table.Columns.Add(pValueFieldName, Type.GetType("System.String"));
set.Tables.Add(table);
stream.Position = 0L;
set.ReadXml(reader, XmlReadMode.IgnoreSchema);
stream.Close();
DataRow[] rowArray = table.Select(pKeyFieldName + " = '" + pKeyString + "'");
if (rowArray.Length > 0)
{
str = rowArray[0][pValueFieldName].ToString();
}
return str;
}
/// <summary>
///从xml获取值
/// </summary>
/// <param name="pXmlPath">xml文件路径</param>
/// <param name="pXmlFileName">xml文件名</param>
/// <param name="pDsTableName">xml中表示(类似数据库的表)</param>
/// <param name="pKeyFieldName">xml中条件字段(类似数据库表的字段名)</param>
/// <param name="pKeyString">xml中条件值(类似数据库表的字段值)</param>
/// <param name="pValueFieldName">xml中目标字段(类似数据库表的字段名)</param>
/// <returns>xml中目标字段值</returns>
public string ReadSystemAttribute(string pXmlPath, string pXmlFileName, string pDsTableName, string pKeyFieldName,
string pKeyString, string pValueFieldName) //Copy from /CyberMall/Components/Lang.cs
{
string mReturnValue = ""; //Default或Eof時:Return ""
DataSet sysDS = new DataSet("CyberMall");
string strNewFileName = pXmlPath + pXmlFileName;
FileStream fsForReader = new FileStream(strNewFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
StreamReader myStreamReader = new StreamReader(fsForReader, System.Text.Encoding.GetEncoding(65001)); //讀取XML:<?xml version="1.0" encoding="utf-8" ?>
//Find:.NET Framework Class Library---KeyWord:[Encoding Class],[Encoding class, samples],[EncodeUrl method]
//UTF8Encoding對應的code page=65001---ms-help://MS.VSCC/MS.MSDNVS/cpref/html/frlrfsystemtextencodingclasstopic.htm
DataTable myTable = new DataTable(pDsTableName);
//---宣告DataTable欲讀取XML檔案中存在的欄位
myTable.Columns.Add(pKeyFieldName, Type.GetType("System.String")); //Ex.Key
myTable.Columns.Add(pValueFieldName, Type.GetType("System.String")); //Ex.Value
//---將DataTable加入DataSet中
sysDS.Tables.Add(myTable);
//---開始讀取XML資料
//myDS.Tables("Customers").Select()
fsForReader.Position = 0;
sysDS.ReadXml(myStreamReader, XmlReadMode.IgnoreSchema);
fsForReader.Close();
DataRow[] OnewRow = myTable.Select(pKeyFieldName + " = '" + pKeyString + "'"); //第2個參數:"Key DESC"
if (OnewRow.Length > 0)
mReturnValue = OnewRow[0][pValueFieldName].ToString();
return mReturnValue;
}
XML 文件
Message.xml
<Multi-Language>
<ID>picLimit6</ID>
<TW>圖片數量已為6張,再不能上傳!</TW>
<JP>画像数は既に6枚、これ以上アップロードできません。</JP>
<US>6 pictures already, can't upload again</US>
<MY>6 pictures already, can't upload again</MY>
</Multi-Language>
<Multi-Language>
<ID>up6</ID>
<TW>最多只能上傳6張圖片!</TW>
<JP>画像を最多6枚しかアップロードできません。</JP>
<US>At most 6 pictures</US>
<MY>At most 6 pictures</MY>
</Multi-Language>
<Multi-Language>
<ID>delFailed</ID>
<TW>刪除失敗!</TW>
<JP>削除に失敗しました。</JP>
<US>Delete Failed</US>
<MY>Delete Failed</MY>
</Multi-Language>