2

オブジェクトを SQL Server XML フィールドにシリアル化するメソッドがあります。Managmenet Studio の SQL サーバーに XML が表示されているので、それを HTML ページに表示する必要があります。

次のようにストアド プロシージャを呼び出す WebMethod を呼び出す AJax 関数を使用します。

using (conn){
    using (SqlCommand cmd = new SqlCommand()){

        conn.Open();

        cmd.CommandText = "GetMessage_Sel";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@messageId", SqlDbType.VarChar, 50).Value = str;
        cmd.Connection = conn;

        try{
            rdr = cmd.ExecuteReader();

            if (rdr.HasRows){

                while (rdr.Read()){
                    returnValue1 = rdr.GetString(0);
                    returnValue2 = rdr.GetString(1);
                }      
            }

            else{
                Console.WriteLine("No rows found.");
            }  
            rdr.Close();
        }

        catch (Exception err){
            // handle the error
            //messageInsert = false;
        }

        finally{ 
            conn.Close(); 
        }
    }
}

return new string[] {returnValue1,returnValue2};

したがって、ajax は次のように設定されます。

$('.view-details').click(function (e) {
    e.preventDefault();

    $('#ticket-id').text("Ticket id: " + $(this).closest('tr').children().eq(1).html());

    $.ajax({
        type: "POST",

        url: "Default.aspx/PopulatePopUp",

        cache: false,
        data: "{'arg':'" + $(this).closest('tr').children().eq(1).html() + "'}",
        contentType: "application/json; charset=utf-8",

        dataType: "json",

        success: function (msg)
        {
            $("#CompleteMessage").text(msg.d[0]);
            $("#lblaka").text(msg.d[1]);
        }

    });
}

#lblaka は XML メッセージ全体を表示しますが、これをより読みやすい方法に分解する必要があります。したがって、WebMethod または Ajax 関数のいずれかで、rdr.GetString(1) を反復処理するにはどうすればよいですか?

foreach (var item in rdr.GetString(1))  {
    string 1 = xml node value 1 ..... etc
}

編集:

格納されている XML の例を次に示します。

<Person xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <AKA>
        <string>Name 1</string>
        <string>Name 2</string>
    </AKA>
    <Countries>
        <string>USA</string>
        <string>UK</string>
    </Countries>
    <Names>
        <string>Name 1</string>
        <string>Name 2</string>
    </Names>
    <Gender>Male</Gender>
</Person>
4

2 に答える 2

2

jQueryでそれを行う方法は次のとおりです。

この関数を宣言します。

function GetNestedElements(aThis, name) {
 $(aThis).find(name).each(function(index){            
        $("#lblaka").append('<span>'+ name +' : ');
        $(this).find('string').each(function(index){            
             $("#lblaka").append($(this));
            });
        $("#lblaka").append('</span><br/>');
    });    
}

サクセス コールでこれを使用します。

var xml = $.parseXML(msg),
$xml = $( xml );
$xml.find('Person').each(function(index){             
    GetNestedElements(this, 'AKA');
    GetNestedElements(this, 'Countries');
    GetNestedElements(this, 'Names');

    var gender = $(this).find('Gender').text();                 
            $("#lblaka").append('<span>Gender : ' + gender + '</span><br/>');

        });

動作中のバージョンについては、この jsFiddle を参照してください (表示するには、[Show Person] を選択してください)。

http://jsfiddle.net/MZ5Xs/2/

于 2013-07-10T14:51:23.467 に答える