0

私はWCFベースのWebサービスを使用しており、メソッド内でストアドプロシージャを実行してデータセットを入力し、最後に1つの列と複数の行のようにデータセットを返します。しかし、このようなXMLに基づく出力を期待する他の製品を介してこのWebサービスを呼び出しているため、現在の要件は異なります。(サンプルXML形式です)しかし、私は同じ方法で何かが欲しいです。では、どうすればxmlを生成して返すことができますか。私はXMLの専門家ではないので、誰かが指定されたコードを修正していただければ幸いです。XMLを扱うのはこれが初めてです。何か欲しい

<xml>
   <Approvers>
      <Approver>
          <Approvername>John</Approvername>
      </Approver>
   </Approvers>
</xml>

私がフォローしたいサンプルXMLフォーマット。

ここに画像の説明を入力してください

public DataSet getRequisitionApprovers(string pEmail, string pLocationType)
        {
            //Read Datasource properties from Web.config file to access Oracle EBS Database 
            string SDataSource = System.Configuration.ConfigurationManager.AppSettings["SQLDataSource"].ToString();
            string SUserID = System.Configuration.ConfigurationManager.AppSettings["SQLUserID"].ToString();
            string SPassword = System.Configuration.ConfigurationManager.AppSettings["SQLPassword"].ToString();

            //Build connection string based on retrieved parameters from web.config file
            string connectionString = "Data Source=" + SDataSource + ";Persist Security Info=True;" + "User ID=" + SUserID + ";Password=" + SPassword;

            using (SqlConnection connection = new SqlConnection())
            {
                connection.ConnectionString = connectionString;
                connection.Open();

                SqlCommand command = connection.CreateCommand();

                command.CommandType = System.Data.CommandType.StoredProcedure;

                // Name of procedure or function to be execu
                command.CommandText = "Get_RequisitionApprovers";

                command.Parameters.Add(new SqlParameter("theEmail", SqlDbType.VarChar)).Value = pEmail;
                command.Parameters.Add(new SqlParameter("LocationType", SqlDbType.VarChar)).Value = pLocationType;

                //Create New DataSET & DataTable
                DataSet dsApprovers = new DataSet();
                DataTable dtApprovers = new DataTable();

                //Create DataTable Columns and define the data type 
                dtApprovers.Columns.Add("Approver1", typeof(string));


                //Add DataTable to DataSource
                dsApprovers.Tables.Add(dtApprovers);

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    //Create new Data Row
                    DataRow theRow = dsApprovers.Tables[0].NewRow();

                    theRow[0] = reader[0].ToString() ;   //Add -> Approver

                    dsApprovers.Tables[0].Rows.Add(theRow);
                }

                return dsApprovers;
            }
        }
4

1 に答える 1

0

あなたがビデオで見ることができるように、あなたはこれを理解するのにかなり近いです。

DataTable.TableName設定しないとシリアル化されないため、必ず設定してください。

残っているのは、WCFサービスを設定し、WebMethodから返されるXML文字列を定義することだけDataTableです。

WebServiceを設定した後、WebMethodを定義してXMLを返すと、次のようになります。

//StringWriter requires System.IO
using System.IO;

//This are hypothetical Class and WebMethod names, of course
public class RequisitionApprovers : System.Web.Services.WebService
{
    [WebMethod]
    public string ReturnRequisitionApproversAsXMLString(DataSet ds)
    {
        StringWriter writer = new StringWriter();
        ds.WriteXml(writer, XmlWriteMode.IgnoreSchema);
        string xmlResult = writer.ToString();

        return xmlResult;
    }
}

残っているのは、必要に応じてxml文字列から「\ r \ n」と空白を削除することだけです。最終的には、クリーンなxml文字列がWebMethod返されます。

于 2013-02-05T17:16:21.557 に答える