2010-11-21 14 views
2

Für diese xml (in einer SQL 2005-XML-Spalte):bekommen XML-Attribute von SQL

<doc> 
<a>1</a> 
<b ba="1" bb="2" bc="3" /> 
<c bd="3"/> 
<doc> 

Ich mag würde in der Lage sein, die Namen der Attribute (ba, bb, bc, bd) abrufen anstatt die Werte im Inneren mit C# -Fenster bilden Anwendung.

+0

Haben Hast du das nicht schon mal gefragt? http://stackoverflow.com/questions/4237327/getting-attributes-and-values-of-xml-using-c –

+0

ja aber das war nicht die genaue Antwort, die mir hilft ... ich hoffe, ich könnte es klar machen jetzt – salman

+0

Salman Ihre Xml ist nicht im richtigen Format, '' sollte am Ende sein, Sie können 'attr.Value' in dem Code, den ich für Sie veröffentlicht, wenn Sie Ihre aktuelle XML-Problem beheben, erhalten Sie' ba, bb , bc, bd' sollten Sie auch zusätzliche Ausgänge entfernen. –

Antwort

0

Es gibt zwei Möglichkeiten, dies in Ihrem Fall zu tun:

  • Wenn Sie Prozeduren auf dem SQL-Server gespeichert erstellen:
    Sie können eine gespeicherte Prozedur erstellen, die die XML-Daten in Spalten zerlegt, und leicht SELECT sie und haben die C# -App behandeln es als ob es eine Tabelle mit Spalten und Zeilen wäre.

  • Wenn Sie sich nicht:
    können Sie die XML in C# zerlegen SqlXml vom System.Xml Namespace.

Beide Wege sind sehr gut hier mit Beispielen erläutert:
http://msdn.microsoft.com/en-us/library/ms345117(SQL.90).aspx#sql2k5xml_topic4

+0

Ich möchte Unterstützung in C# PLZ machen mich nicht in falschen Weg – salman

+0

@salman; Die zweite Wahl, die ich dir gegeben habe, ist C#. – BeemerGuy

1

Versuchen Sie dies so etwas wie - die Verbindungszeichenfolge und Abfrage an Ihre eigene die erste Methode wird die XML-Zeichenfolge aus der Datenbank laden (neu einstellen Datenbank, Server, Tabelle, Spaltennamen) und die zweite Methode wird die XML-Zeichenfolge geladen aus der Datenbank in eine Liste von Attributnamen basierend auf der Antwort, die Sie bekommen für Ihre vorherige Frage analysieren:

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; 
    } 
Verwandte Themen