2010-11-21 37 views
2

gelen sıfatları:alma xml (SQL 2005 XML sütununda) Bu xml için SQL

<doc> 
<a>1</a> 
<b ba="1" bb="2" bc="3" /> 
<c bd="3"/> 
<doc> 
Ben özelliklerin adlarını almak edebilmek istiyorum

(ba, bb, bc, bd) C# windows form uygulamasında içindeki değerler yerine.

+0

Bunu daha önce sormadın mı? http://stackoverflow.com/questions/4237327/getting-attributes-and-values-of-xml-using-c –

+0

evet ama bu bana yardımcı olan tam bir cevap değildi ... umarım net yapabilirim şimdi – salman

+0

Salman sizin Xml doğru formatta değil, '' sonunda olmalı, Sizin için yayınladığım kod içinde attr.Value 'atlayabilirsiniz, eğer mevcut xml sorunu giderirseniz, 'ba, bb bc, bd' de ekstra çıktıları çıkarmalısınız. –

cevap

0

sizin durumunuzda Bunu yapmanın iki yolu vardır:

  • Eğer SQL sunucusu üzerinde saklı yordamlar oluşturma yapabiliyorsanız:
    Sen sütunlar halinde XML demonte bir saklı yordam oluşturabilir, ve kolayca SELECT onları ve C# app sütunlar ve satırları olan bir tablo gibi ele sahip.

  • Eğer aynı anda hem:
    Sen System.Xml ad alanından SqlXml kullanılarak C# XML sökebilirsiniz.

Hem yollar

çok iyi burada örneklerle açıklanmıştır:
http://msdn.microsoft.com/en-us/library/ms345117(SQL.90).aspx#sql2k5xml_topic4

+0

C# plz'de destek istemiyorum yanlış yol yapmayın – salman

+0

@salman; Sana verdiğim ikinci seçim C#. – BeemerGuy

1

Böyle bir şey deneyin - İlk yöntem (veritabanından XML dizesi yüklemek kendi bağlantı dizesi ve sorguyu ayarlayacaktır veritabanı, sunucu, masa, sütun adları), ve bir önceki soru için var yanıta göre nitelik adlarının bir liste halinde veritabanından yüklenen XML dizesi ayrıştırmak olacaktır ikinci yöntem: var

static void Main(string[] args) 
    { 
     string xmlContent = GrabStringFromDatabase(1); 
     List<string> attributeNames = ParseForAttributeNames(xmlContent); 

     Console.WriteLine("Your XML attributes are: {0}", string.Join(",", attributeNames.ToArray())); 
    } 

    private static string GrabStringFromDatabase(int ID) 
    { 
     string result = string.Empty; 
     string connection = "server=(local);database=test;integrated security=SSPI"; 
     string query = "SELECT XmlContent FROM dbo.TestXml WHERE ID = @ID"; 

     using(SqlConnection _con = new SqlConnection(connection)) 
     using (SqlCommand _cmd = new SqlCommand(query, _con)) 
     { 
      _cmd.Parameters.Add("@ID", SqlDbType.Int).Value = ID; 

      _con.Open(); 
      result = _cmd.ExecuteScalar().ToString(); 
      _con.Close(); 
     } 

     return result; 
    } 

    private static List<string> ParseForAttributeNames(string xmlContent) 
    { 
     List<string> attributeNames = new List<string>(); 

     XDocument xmlDoc = XDocument.Parse(xmlContent); 

     var nodeAttrs = xmlDoc.Descendants().Select(x => x.Attributes()); 

     foreach (var attrs in nodeAttrs) 
     { 
      foreach (var attr in attrs) 
      { 
       attributeNames.Add(attr.Name.LocalName); 
      } 
     } 

     return attributeNames; 
    }