2016-12-28 4 views
0

Hallo ich habe mehr als 20 Links von XML-Dateien. Ich suchte viel, um mein xml zu C# zu konvertieren und es dann entsprechend Klassen zu deserialisieren und es dann in die Datenbank zu setzen, aber fand keine gute Lösung dafür. Bitte hilf mir, wie es geht.XML in Klassen konvertieren (deserialisieren) und in die Datenbank speichern

http://kithnyc.com/sitemap_products_1.xml?from=60594372&to=9586327751

Dies ist die Verbindung von Datenbank und einige xml unter

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"> 
<url> 
<loc>http://kithnyc.com/</loc> 
<changefreq>daily</changefreq> 
</url> 
<url> 
<loc> 
http://kithnyc.com/products/adidas-originals-nmd-city-sock-black-blue 
</loc> 
<lastmod>2016-09-12T11:04:04-04:00</lastmod> 
<changefreq>daily</changefreq> 
<image:image> 
<image:loc>...</image:loc> 
<image:title>adidas Originals NMD City Sock - Black/Blue</image:title> 
</image:image> 
</url> 
<url> 
<loc> 
http://kithnyc.com/products/kith-logo-mousepad-white 
</loc> 
<lastmod>2016-12-23T00:01:41-05:00</lastmod> 
<changefreq>daily</changefreq> 
<image:image> 
<image:loc> 
https://cdn.shopify.com/s/files/1/0094/2252/products/20150810-_MG_2963.jpg?v=1482353363 
</image:loc> 
<image:title>Kith Logo Mousepad - White</image:title> 
</image:image> 
</url> 
</urlset> 

Dies ist die XML-i alle seine Knoten in der Datenbank wie „Loc“ setzen wollen, „lastmod“ und "changefreq" usw. Bitte helfen Sie mir, wie man es in Klassen umwandelt und dann wie man es deserialisiert. Dank

+0

Hier finden Sie aktuelle http://stackoverflow.com/a/19612238/87956 xml Klasse zu konvertieren und dann normale Serialisierung/deserilization verwenden, um aus der Datenbank zu speichern und retrive als Objekt. Auch da Sie in cs kompilieren, was bedeutet, dass Sie eine konkrete Struktur haben, können Sie in Erwägung ziehen, eine separate Tabelle für xml zu erstellen. –

Antwort

0

Hallo Sie können es wie folgt tun:

Schritt 1: Lesen Sie die Datei von der unten Linie

XDocument xdoc = XDocument.Load(filebyte); 

Schritt 2: Der alle Knoten von xml von Nachkommen Methode erhalten und wandeln es in Liste. falls erforderlich where-Klausel anwenden, um diese Daten zu filtern.

var pNodelist = xdoc.Root.Descendants().ToList().Where(i => i.Name.LocalName == "p"); 

Schritt 3: Datentabelle erstellen und speichern alle Daten in Datentabelle aus der Liste wie

DataTable dt = new DataTable(); 
dt.Columns.Add("StartTime"); 
dt.Columns.Add("EndTime"); 
dt.Columns.Add("Message"); 
foreach (var data in pNodelist) 
{ 
if (data.HasAttributes == true) 
dt.Rows.Add(data.FirstAttribute.Value, data.LastAttribute.Value, data.Value); 
} 

Schritt 4: Dann können Sie es db speichern und Sie können den Schritt 4 und direkt speichern vermeiden Datum von Liste zu Datenbank

+0

Anurag können Sie bitte kurz, was ist "P" hier i.Name.LocalName == "p"); –

+0

@Arslan Ahmad p ist die Absatz-Tags in meinem Xml, wie ich alle p-Tags –

+0

@ArslanAhmad wollen Sie einfache Descendants(), um alle Knoten zu bekommen. –

0

Sie können folgende Datenklassen und Repository-Klassen in Ihrem Code hinzufügen. Sie können einfach die Repository-Klasse mit Dateipfad aufrufen und ihre FindAll-Methode aufrufen. Sie gibt die URL-Liste zurück.

public class Url 
{ 
    public string Loc { get; set; } 
    public string Changefreq { get; set; } 
    public string Lastmod { get; set; } 
    public Image Image { get; set; } 

} 
public class Image 
{ 
    public string Loc { get; set; } 
    public string Title { get; set; } 
} 
    public class Repository 
{ 
    private XDocument xmlDatas; 
    public Repository(string filePath) 
    { 
     xmlDatas = XDocument.Load(filePath); 
    } 
    public List<Url> FindAll() 
    { 
     return xmlDatas.Elements().Elements() 
      .Select(url => 
      { 
       Url data = new Url(); 
       foreach (var item in url.Elements()) 
       { 
        switch (item.Name.LocalName) 
        { 
         case "loc": 
          data.Loc = item.Value; 
          break; 
         case "changefreq": 
          data.Changefreq = item.Value; 
          break; 
         case "lastmod": 
          data.Lastmod = item.Value; 
          break; 
         case "image": 
          Image image = new Image(); 
          foreach (var img in item.Elements()) 
          { 
           switch (img.Name.LocalName) 
           { 
            case "loc": 
             image.Loc = img.Value; 
             break; 
            case "title": 
             image.Title = image.Title; 
             break; 
           } 
          } 
          data.Image = image; 
          break; 
        } 
        var s = item.Name.LocalName; 
       } 
       return data; 
      }).ToList(); 
    } 
} 
+0

Ich überprüfte es, dass Findall() - Funktion keine Sache zurückgibt, überprüfen Sie bitte, dass Repository ein = neues Repository ("http: // kithnyc. com/sitemap_products_1.xml? von = 60594372 & bis = 9586327751 "); Liste s = a.FindAll(); –

+0

Ich änderte die Repository-Klasse. Es ist jetzt in Ordnung – Mehmet

+0

Vielen Dank Mehmet. Sie sind Genie .. Danke für Ihre freundliche Hilfe –