สร้าง xml โดยใช้ XmlSerializer

ตอบกระทู้

รูปแสดงอารมณ์
:icon_plusone: :like: :plusone: :gfb: :-D :) :( :-o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :angry: :baa: :biggrin:
รูปแสดงอารมณ์อื่นๆ

BBCode เปิด
[img] เปิด
[url] เปิด
[Smile icon] เปิด

กระทู้แนะนำ
   

มุมมองที่ขยายได้ กระทู้แนะนำ: สร้าง xml โดยใช้ XmlSerializer

Re: สร้าง xml โดยใช้ XmlSerializer

โดย jataz2 » 02/08/2011 10:55 am

ในหน้า design ของหน้า Rss.aspx ให้ลบทุกอย่างให้เหลือเเค่บรรทัดด้านล่างบรรทัดเดียวครับ
เพราะถ้ามีพวก Html Head body อยู่ด้วยจะทำให้ xml ไม่ perform ครับ เพราะัมันจะเจอ tag xml อยู่ 2 เเห่งใน 1 page

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="rss.aspx.cs" Inherits="rss" %>

Re: สร้าง xml โดยใช้ XmlSerializer

โดย jataz2 » 01/08/2011 1:09 pm

สร้างคลาส PRssList.cs

โค้ด: เลือกทั้งหมด

using System;
using System.Data;
using System.Configuration;
using System.Xml;
using System.Xml.Serialization;

namespace Revolic.Data.Rss.DTO
{
    [XmlRoot(ElementName = "rss")]
    public class PRssList
    {
        public PRssChannel channel;

        public PRssList()
        {

        }
    }

    [XmlRoot(ElementName = "channel")]
    public class PRssChannel
    {
        public string title = "";
        public string link = "";
        public string description = "";
        public string language = "";
        public string copyright = "";

        [XmlElement(ElementName = "image")]
        public PRssImage image;

        [XmlElement(ElementName = "item")]
        public PRssItem[] item;

        public PRssChannel()
        {
            //
            // TODO: Add constructor logic here
            //
        }
    }

    [XmlRoot(ElementName = "image")]
    public class PRssImage
    {
        public string url = "";
        public string title = "";
        public string link = "";
        public string width = "";
        public string height = "";

        public PRssImage()
        {

        }
    }
    
    [XmlRoot(ElementName = "item")]
    public class PRssItem
    {
        [XmlAttribute(AttributeName="news_id")]
        public string id = "";
        public string title = "";
        public string description = "";
        public string link = "";
        public string pubDate = "";
        public string thumb = "";

        public PRssItem()
        {

        }
    }
}
ในหน้า Rss.aspx ก็หยอดค่าลงใน class แล้วเรีัยกใช้ serializer.Serialize() เพื่อ build เป็นโครงสร้าง xml

โค้ด: เลือกทั้งหมด

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Response.ContentType = "text/xml;charset=utf-8";

            PRssList list = new PRssList();
            PRssItem item = new PRssItem();
            item.id = "508";
            item.title = "xxxx";
            item.link = "http://www.***.com/id,508/";
            item.description = "Son Ho Young Son Ho Young";
            item.pubDate = "17 Jul 2551";

            PRssItem[] items = new PRssItem[2];
            items[0] = item;
            items[1] = item;

            PRssImage image = new PRssImage();
            image.title = "Freedom Of Music;";
            image.url = "http://www.***.com/***/logo_default.jpg";
            image.link = "http://www.***.com/";

            PRssChannel channel = new PRssChannel();
            channel.title = "Freedom Of Music;";
            channel.link = "http://www.***.com/";
            channel.description = "music,online,play,listen,vdo,clip,indies";
            channel.language = "th-TH";
            channel.copyright = "***.com";
            channel.image = image;
            channel.item = items;

            list.channel = channel;

            XmlSerializer serializer = new XmlSerializer(typeof(PRssList));
            XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
            namespaces.Add(string.Empty, string.Empty);

            serializer.Serialize(Response.OutputStream, list, namespaces);
        }
    }

สร้าง xml โดยใช้ XmlSerializer

โดย jataz2 » 01/08/2011 12:03 pm

ถ้าเพื่อนๆต้องการ build โครงสร้าง xml ให้มีหน้าตาเเบบด้านล่างนี้ มี object หลายตัวที่ทำได้ครับ
เช่น XmlDocument แล้ววนรูป AppendChild ไปเรื่อยๆ , XmlWriter ก็ทำได้ครับ แต่ผมเเนะนำให้ใช้ XmlSerializer ครับ เพราะจะเป็นระเบียบกว่า เเก้ code ภายหลังได้ง่าย โดยเราไปสร้าง class โดยนิยามโครงสร้างใน class ให้เท่ากับ xml ที่เราต้องการ เเล้วเราก็ยัดค่าลงไปใน class เเล้วใช้ XmlSerializer วาด xml ออกมา

โค้ด: เลือกทั้งหมด

<?xml version="1.0" encoding="utf-8" ?> 
 <rss version="2.0">
 <channel>
     <title>***.com: เว็บไซต์สำหรับคนรักดนตรีอิสระ</title> 
     <link>http://www.***.com/</link> 
     <description>เพลง,ฟังเพลง,เนื้อเพลง,ฟังเพลงออนไลน์</description> 
     <language>th-TH</language> 
     <copyright>***.com</copyright> 
 <image>
     <title>***.com: เว็บไซต์สำหรับคนรักดนตรีอิสระ</title> 
     <url>http://www.***.com/logo_default.jpg</url> 
     <link>http://www.***.com/</link> 
  </image>
 <item news_id="4913">
    <title>“Room 39” ขยายเวลา</title> 
    <link>http://www.***.com/id,4913/</link> 
    <thumb><img src="http://image.***.com/thum266" \></thumb> 
  <description>”Room 39”</description> 
  <pubDate>01 สิงหาคม 2554</pubDate> 
  </item>
 <item =news_id="1111">
  ....
 </item>
 </channel>
</rss>

ข้างบน