2016-12-28 4 views
0

こんにちは、私はxmlファイルの20以上のリンクを持っています。私はxmlをC#に変換してクラスにしたがってデシリアライズしてデータベースに入れましたが、そのための良い解決策は見つかりませんでした。どうやってそれを手伝ってください。XMLをクラスに変換(逆シリアル化)してデータベースに保存します

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

これは、データベースのリンクであり、いくつかのXMLが

<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> 

を下回っているこれは私が「のLoc」、「LASTMOD」のように、データベース内のすべてのノードを配置するxmlですし、 "changefreq"など私はクラスに変換する方法を教えてくださいし、どのようにそれを逆シリアル化する。

ステップ1:おかげ

+0

xmlをクラスに変換し、通常の直列化/非消化を使用してデータベースからオブジェクトとして保存して検索するには、次のコードを見てください:http://stackoverflow.com/a/19612238/87956また、あなたが具体的な構造を持っていることを意味するcsにコンパイルしているので、問題のxmlのために別のテーブルを作成することを検討するかもしれません。 –

答えて

0

こんにちは、あなたはこのようにそれを行うことができます下の行で、ファイルを読む

XDocument xdoc = XDocument.Load(filebyte); 

ステップ2:子孫法により、XMLのすべてのノードを取得しに変換リスト。 必要な場合は、where句を適用してそのデータをフィルタ処理します。

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

ステップ3:データテーブルを作成し、

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); 
} 

ステップ4のように、リストからデータテーブル内のすべてのデータを格納します。そして、あなたはデシベル、それを保存することができますし、手順4を避けて、直接保存することができますリストからデータベースまでの日付

+0

Anuragは "P"ここでi.Name.LocalName == "p")であることを簡単に教えてください。 –

+0

@Arslan Ahmad pは、すべてのpタグが必要なので、私のXMLの段落タグです –

+0

@ArslanAhmad単純なDescendants()を使用してすべてのノードを取得します。 –

0

コードに次のデータクラスとリポジトリクラスを追加できます。ファイルパスでRepositoryクラスを呼び出し、そのFindAllメソッドを呼び出すことができます.Urlリストを返します。

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

Findall()関数が返すものではないことを確認してください、リポジトリa =新しいリポジトリ( "http:// kithnyc。 com/sitemap_products_1.xml?from = 60594372&to = 9586327751 "); リスト s = a.FindAll(); –

+0

私はリポジトリクラスを変更しました。今は大丈夫です – Mehmet

+0

ありがとうMehmet。あなたは天才です..あなたの親切な助けをありがとう –

関連する問題