C# SQL中的XML字段

C# SQL中的XML字段,c#,xml,ajax,C#,Xml,Ajax,我有一个方法可以将对象序列化到SQLServerXML字段中。我在Managmenet Studio的SQL server中看到了XML,现在我需要在HTML页面中显示它 我使用AJax函数调用WebMethod,WebMethod调用存储过程如下: using (conn){ using (SqlCommand cmd = new SqlCommand()){ conn.Open(); cmd.CommandText = "GetMessage_Se

我有一个方法可以将对象序列化到SQLServerXML字段中。我在Managmenet Studio的SQL server中看到了XML,现在我需要在HTML页面中显示它

我使用AJax函数调用WebMethod,WebMethod调用存储过程如下:

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};
$('.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]);
        }

    });
}
因此,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};
$('.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>

名字1
名称2
美国
英国
名字1
名称2
男性

如果它在SQL字符串中是纯XLM,您可以将该字符串加载到像这样的XDocument中,并使用linq进行查询以使列表循环

XDocument xDoc = XDocument.Parse(rdr.GetString(1));
var query = xDoc.Descendants("AKA").Elements("string").ToList();

//If you want to add them to an Array
string[] array = new string[query.Count() -1];
int i = 0
// this will add the values Name 1 and Name 2 to an array
foreach (var element in query)
{
     array[i] = element.Value;
     i++;
}

以下是使用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/>');
    });    
}
函数GetNestedElements(aThis,name){ $(aThis).find(name).each(函数(索引){ $(“#lblaka”).append(“+name+”:”); $(this.find('string')。每个(函数(索引){ $(“#lblaka”)。追加($(本)); }); $(“#lblaka”).append(“
”); }); } 在您的成功电话中使用此选项:

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/>');

        });
var xml=$.parseXML(msg),
$xml=$(xml);
$xml.find('Person')。每个(函数(索引){
GetNestedElements(这是“AKA”);
GetNestedElements(即“国家”);
GetNestedElements(这是“名称”);
var gender=$(this.find('gender').text();
$(“#lblaka”).append('Gender:'+Gender+'
'); });
请查看此JSFIDLE以了解工作版本(选择“Show Person”查看):


此方法存在轻微问题。如果我点击点击按钮,同样的信息会一次又一次地被写出来。我想这是最重要的。嗨,对不起。我已经更新了JSFIDLE以显示它已清除。选择“Show Person”以在非常好的时间查看此操作。只是想知道哪种方法使用起来更快。感谢guyshutchonoid,我倾向于使用jquery方法。对于具有多个条目的项目,可以将其显示为:名称标题名称项目1名称项目2基本上,不是所有项目都在同一行上,而是跨多行拆分,您只需在javascript中操作html,如下所示: