读取 XML (多语系)

 
 
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>

你可能感兴趣的:(xml)