2013年5月27日 星期一

webservice - xml to json(C#)

此文章您無權限
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Xml;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Collections;

///
/// DrugQuery 的摘要描述
///
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 若要允許使用 ASP.NET AJAX 從指令碼呼叫此 Web 服務,請取消註解下一行。
// [System.Web.Script.Services.ScriptService]
public class DrugQuery : System.Web.Services.WebService {

    DrugDataSystemRef.wsDrugDataSystem systemWS = new DrugDataSystemRef.wsDrugDataSystem();
    public DrugQuery()
    {

    }
    [WebMethod]
    public string HelloWorld() {
        return "Hello World";
    }

    /**
    * 取得 症狀名稱查詢資料
    **/
    [WebMethod]
    public String GetDrugDataListByIndication(String indication)
    {
        // 讀取從 它方 webservice
        indication =  systemWS.GetDrugDataListByIndication(indication.Replace(" ",""));

        // ============================================
        // load and handle xml format
        // ============================================

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(indication);
        XmlDocument afterParseDoc = stripDocumentNamespace(doc);
        // 取xml內code與msg 
        XmlNode code = afterParseDoc.SelectSingleNode("/string/error/code");
        XmlNode msg = afterParseDoc.SelectSingleNode("/string/error/msg");
        // 取row 的node list
        XmlNodeList rowList = afterParseDoc.SelectNodes("/string/data/row");


        // 使用Dictionary記錄code與name值
        Dictionary drugDataDic = new Dictionary();
        foreach (XmlNode xn in rowList)
        {
            if( xn["code"].InnerText != null || xn["code"].InnerText != "" )
            {
                drugDataDic.Add(xn["code"].InnerText.Trim(), xn["name"].InnerText.Trim());
            }
        }


        // ===========================================
        // handle xml to json format
        // ===========================================

        // 建立物件
        JObject jObj = new JObject();
        // 建立屬性 值
        jObj.Add(new JProperty("result", code.InnerText.Trim()));
        jObj.Add(new JProperty("message", msg.InnerText.Trim()));

        JArray jAry = new JArray();

        // 建立resultData Array
        jObj.Add(new JProperty("resultData", jAry));

        foreach( KeyValuePair kvp in drugDataDic )
        {
            // 建立resultData內部物件A
            JObject resObj = new JObject();
            // 新增屬性值
            resObj.Add("code", kvp.Key.Trim());
            resObj.Add("name", kvp.Value.Trim());
            // 將物件A加入Array
            jAry.Add(resObj);

        }
        // 輸出json格式
        String output = JsonConvert.SerializeObject(jObj);
        return output;
    }


    /**
    * 取得 症狀藥品名稱查詢資料
    **/
    [WebMethod]
    public string GetDrugDataListByName(String name)
    {
        // 取得查詢結果
        name = systemWS.GetDrugDataListByName(name.Replace(" ", ""));

        // ============================================
        // load and handle xml format
        // ============================================

        //  parse xml查詢結果
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(name);
        XmlDocument afterParseDoc = stripDocumentNamespace(doc);

        XmlNode code = afterParseDoc.SelectSingleNode("/string/error/code");
        XmlNode msg = afterParseDoc.SelectSingleNode("/string/error/msg");

        XmlNodeList rowList = afterParseDoc.SelectNodes("/string/data/row");

        // 使用Dictionary記錄code與name值      
        Dictionary drugDataDic = new Dictionary();
        foreach (XmlNode xn in rowList)
        {
            if (xn["code"].InnerText.Trim() != null || xn["code"].InnerText.Trim() != "")
            {
                drugDataDic.Add(xn["code"].InnerText.Trim(), xn["name"].InnerText.Trim());
            }
    
        }

        // ===========================================
        // handle xml to json format
        // ===========================================

        // 建立物件
        JObject jObj = new JObject();
        // 建立屬性 值
        jObj.Add(new JProperty("result", code.InnerText.Trim()));
        jObj.Add(new JProperty("message", msg.InnerText.Trim()));

        JArray jAry = new JArray();

        // 建立resultData Array
        jObj.Add(new JProperty("resultData", jAry));

        foreach (KeyValuePair kvp in drugDataDic)
        {
            // 建立resultData內部物件A
            JObject resObj = new JObject();
            // 新增屬性值
            resObj.Add("code", kvp.Key.Trim());
            resObj.Add("name", kvp.Value.Trim());
            // 將物件A加入Array
            jAry.Add(resObj);

        }

        // 輸出json格式
        String output = JsonConvert.SerializeObject(jObj);
        return output;
    }

    /**
    * 取得 uk查詢資料
    **/
    [WebMethod]
    public string GetDrugData(String uk)
    {
        uk = systemWS.GetDrugData(uk.Trim());

        // ============================================
        // load and handle xml format
        // ============================================
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(uk);
        XmlDocument afterParseDoc = stripDocumentNamespace(doc);

        XmlNode errCode = afterParseDoc.SelectSingleNode("/string/error/code");
        XmlNode errMsg = afterParseDoc.SelectSingleNode("/string/error/msg");


        XmlNodeList rowList = afterParseDoc.SelectNodes("/string/data/row");


        List ukDataList = new List();
        for( int i = 0 ; i < rowList.Count ; i++ )
        {
            if (rowList[i].SelectSingleNode("code").InnerText.Trim() != null || rowList[i].SelectSingleNode("code").InnerText.Trim() != "")
            {
                SetUkData setUkData = new SetUkData();
                setUkData.CodeValHandler = rowList[i].SelectSingleNode("code").InnerText.Trim();
                setUkData.NameValHandler = rowList[i].SelectSingleNode("name").InnerText.Trim();
                setUkData.ViewValHandler = rowList[i].SelectSingleNode("view").InnerText.Trim();
                setUkData.PictureValHandler = rowList[i].SelectSingleNode("picture1").InnerText.Trim();
                setUkData.FactorValHandler = rowList[i].SelectSingleNode("factor").InnerText.Trim();
                setUkData.AdaptValHandler = rowList[i].SelectSingleNode("adapt").InnerText.Trim();
                setUkData.AtendValHandler = rowList[i].SelectSingleNode("attend").InnerText.Trim();
                setUkData.SideEffectValHandler = rowList[i].SelectSingleNode("side_effect").InnerText.Trim();

                ukDataList.Add(setUkData);
            }

        }

        // ===========================================
        // handle xml to json format
        // ===========================================

        // 建立物件
        JObject jObj = new JObject();
        // 建立屬性 值
        jObj.Add(new JProperty("result", errCode.InnerText.Trim()));
        jObj.Add(new JProperty("message", errMsg.InnerText.Trim()));

        JArray jAry = new JArray();

        // 建立resultData Array
        jObj.Add(new JProperty("resultData", jAry));

        for( int i = 0 ; i < ukDataList.Count ; i++ )
        {
            // 建立resultData內部物件A
            JObject resObj = new JObject();
            // 新增屬性值
            resObj.Add("code", ukDataList[i].CodeValHandler.Trim());
            resObj.Add("name", ukDataList[i].NameValHandler.Trim());
            resObj.Add("view", ukDataList[i].ViewValHandler.Trim());
            resObj.Add("picture1", ukDataList[i].PictureValHandler.Trim());
            resObj.Add("factor", ukDataList[i].FactorValHandler.Trim());
            resObj.Add("adapt", ukDataList[i].AdaptValHandler.Trim());
            resObj.Add("attend", ukDataList[i].AtendValHandler.Trim());
            resObj.Add("side_effect", ukDataList[i].SideEffectValHandler.Trim());
            // 將物件A加入Array
            jAry.Add(resObj);

        }

        String output = JsonConvert.SerializeObject(jObj);

        return output;
    }


    // remove namespace string
    XmlDocument stripDocumentNamespace(XmlDocument oldDom)
    {
        // Remove all xmlns:* instances from the passed XmlDocument
        // to simplify our xpath expressions.
        XmlDocument newDom = new XmlDocument();
        newDom.LoadXml(System.Text.RegularExpressions.Regex.Replace(
        oldDom.OuterXml, @"(xmlns:?[^=]*=[""][^""]*[""])", "",
        System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline)
        );
        return newDom;
    }

    // 讀寫 UK的內容值
    class SetUkData
    {
        private String codeVal;
        private String nameVal;
        private String viewVal;
        private String pictureVal;
        private String factorVal;
        private String adaptVal;
        private String atendVal;
        private String sideEffectVal;

        public String CodeValHandler
        {
            get
            {
                return codeVal;
            }
            set
            {
                this.codeVal = value;
            }
        }

        public String NameValHandler
        {
            get
            {
                return nameVal;
            }
            set
            {
                this.nameVal = value;
            }
        }

        public String ViewValHandler
        {
            get
            {
                return viewVal;
            }
            set
            {
                this.viewVal = value;
            }
        }

        public String PictureValHandler{
            get{
                return pictureVal;
            }
            set{
                this.pictureVal = value;
            }
        }

        public String FactorValHandler
        {
            get
            {
                return factorVal;
            }
            set
            {
                this.factorVal = value;
            }
        }

        public String AdaptValHandler
        {
            get
            {
                return adaptVal;
            }
            set
            {
                this.adaptVal = value;
            }
        }

        public String AtendValHandler
        {
            get
            {
                return atendVal;
            }
            set
            {
                this.atendVal = value;
            }
        }

        public String SideEffectValHandler
        {
            get
            {
                return sideEffectVal;
            }
            set
            {
                this.sideEffectVal = value;
            }
        }
    }
}

2013年5月20日 星期一

ADO.NET連接DB抓取資料(C#)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Configuration;
using System.Data.SqlClient;

public partial class ADONET : System.Web.UI.Page
{

    String sqlCmmand = "select id,test_time,summary,author from test";
    protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = WebConfigurationManager.ConnectionStrings["testConnectionString2"].ConnectionString;

        //SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["testConnectionString2"].ConnectionString);
        SqlDataReader dr = null;
        SqlCommand cmd;
        cmd = new SqlCommand(sqlCmmand, conn);

        try
        {
            conn.Open();
            dr = cmd.ExecuteReader();


            while ((dr.Read()))
            {
                String test = "";
                test += dr.GetSqlString(2).ToString() + "
";
                Response.Write(test);
            }

            Response.Write("==============");

            //GridView1.DataSource = dr;
            //GridView1.DataBind();
         
            //String test = "";
            //while ((dr.Read()))
            //{
                //test = dr[0].ToString();
            //}
            //Response.Write(test);

            //Response.Write(dr[0].ToString());
            //int id = dr.GetOrdinal("id");
            //Response.Write(dr[2].ToString());

            //Response.Write(dr.GetSqlString[2] + "");
 
        }
        catch (Exception ex)
        {
            Response.Write("Error Message -->" + ex.ToString() + "
");
            throw;
        }
        finally
        {
            if (dr != null)
            {
                cmd.Cancel();
                dr.Close();
            }

            if (conn.State == System.Data.ConnectionState.Open)
            {
                conn.Close();
                conn.Dispose();
            }
        }

    }
}

2013年5月9日 星期四

XCODE下使用SVN

在MAC Lion 10.7.5 XCode 4.6使用SVN 之前一直出問題

在改好code之後,file -> commit 卻會跳出

The operation could not be performed because no valid working copies were
found.

please verify that your files are under source control and try again.

好像一直無法連接到svn那端,

後來研究了發現這樣做可以解決:

1. 先用terminal 下指令 svn list server端svn的位置

2. 進入xcode-> window -> organizer-> Repositories

   ★若裡面已有加入的這個位置,請先刪掉重新點左下角 + -> Add Repository

3. 先checkout 下載你的檔案 若server端無檔案 就import你要的專案即可上傳。

4. 打開checkout的專案 修改 code 存檔。

5. File -> Source Control -> commit 即可連結上這個svn server位置 上傳定版的檔。

---
提供網路找到的別的方式 但我沒試過,因為我找不到svnserve.conf在哪  == =="


使用命令行修改代碼目錄下conf子目錄下的svnserve.conf配置文件
把anon-access=read改成anon-access=none.

如下:
[general]
### These options control access to the repository for unauthenticated
### and authenticated users.  Valid values are "write", "read",
### and "none".  The sample settings below are the defaults.
anon-access = none
auth-access = write


2013年5月7日 星期二

Titanium 安裝 SVN 錯誤

今天在Titanium要安裝SVN的時候發現無法安裝,

從help -> install new software裡面找到svn後

安裝就跳出

titanium svn An error occurred while collecting items to be installed..
一長串

沒有記錄到,因為不小時裝起來了

怎麼安裝起來的其實我也不清楚,

我原本在 install new software的地方直接選 All Available Site,

在搜尋直接查SVN卻無法安裝,一直會跳出此error,

後來我把titanium更新之後,

在install new software->add -> name 隨意

location-> 輸入

http://download.eclipse.org/releases/helios

再到搜尋輸入SVN安裝,即可正常安裝~!

詳細安裝請參考:

https://wiki.appcelerator.org/display/tis/Subversion



2013年5月6日 星期一

Android設備統計

在Android平台開發到底要合適哪個版本的平台是很重要的~

可以參考google 的統計

http://developer.android.com/about/dashboards/index.html


這是到2013.05.01的統計  android 2.3.3 已經有38.4%了




2013年5月5日 星期日

mac安裝eclipse的svn外掛(subclipse)


mac安裝eclipse的svn外掛(subclipse)

我的系統是mac os 10.7.5

eclipse-->help-->install new software --> add

name就隨意打(ex:subclipse) ,網址打 

http://subclipse.tigris.org/update_1.8.x 

出現subclipse與svnKit 都打勾,一直下一步安裝結束重開ecilpse。

重開完畢到偏好設定->Team->SVN ->team

發現javaHL出問題,

然後網路說要自己更新javaHK

http://www.macports.org/install.php  下載對應的 pkg檔(看你是Lioin還是mountain還是雪豹)

下載完安裝,

然後去terminal執行  (先移到root根目錄)

sudo port install subversion-javahlbindings

若發現 出現   

Error: Port subversion-javahlbindings not found 的錯誤,

請先執行

sudo port -v selfupdate

結果若又出現 

-->  Updating MacPorts base sources using rsync
rsync: failed to connect to rsync.macports.org: Connection refused (61)
rsync error: error in socket IO (code 10) at /SourceCache/rsync/rsync-42/rsync/clientserver.c(105) [receiver=2.6.9]
Command failed: /usr/bin/rsync -rtzv --delete-after rsync://rsync.macports.org/release/tarballs/base.tar /opt/local/var/macports/sources/rsync.macports.org/release/tarballs
Exit code: 10
Error: /opt/local/bin/port: port selfupdate failed: Error synchronizing MacPorts sources: command execution failed

的錯誤的話,

先確認 你網路的port或防火牆是不是有檔,

或你先換個3G網路試試

執行  sudo port -v selfupdate 成功的話會出現以下

-macteki-MacBook-Pro:/ mac$ sudo port selfupdate

--->  Updating MacPorts base sources using rsync
MacPorts base version 2.1.3 installed,
MacPorts base version 2.1.3 downloaded.
--->  Updating the ports tree
--->  MacPorts base is already the latest version

The ports tree has been updated. To upgrade your installed ports, you should run
  port upgrade outdated
  
  
 然後再執行  

 sudo port install subversion-javahlbindings

 就會開始安裝,要一陣子讓他跑一下~

 以上~

2013年5月2日 星期四

在Titanium使用JSDoc產生API文件


這篇來說明一下如何使用jsDoc,

我是在mac系統底下執行,

window系統資訊很多應該很多資料很容易查到。

首先先下載  jsdoc-toolkit jsdoc_toolkit-2.4.0.zip的檔案。

將zip檔解開放到你知道的位置。

一開始我以為要安裝,一直找不到如何安裝,但後來發現解壓縮完就可以用啦。

把你的js檔內加入註釋,但註釋需依照規範來寫,寫比較常見的幾個,

其它就看輔助網站囉~

例如有個method叫做 add()  ,用來相加兩個數的結果。

/**
* 將兩數相加,回傳總和
*
*@param {int} 傳入第一個整數
*@param {int} 傳入第二個整數 
*
*@return {int} 回傳總和的數字
*/

var add = function( a, b)
{
    var result = a + b;
    return result;
}


接下來去終端機下指令:
先移到你的jsdoc那個資料夾(剛才下載解完壓縮的地方)

java -jar jsrun.jar app/run.js -a -t=templates/jsdoc /Users/mac/Desktop/james/project/titanium/xxxx/Resources/*.js

你也可以直接指定檔名 。

接下來在jsdoc的那個資料夾內你會看見一個out的資料夾,裡面就是你的API文件了~

其它的註釋規範可以參考這裡