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

แนะนำ สอบถาม ภาษา C สำหรับผู้เริ่มต้น ภาษา Java ภาษา Python

Moderators: mindphp, ผู้ดูแลกระดาน

User avatar
jataz2
PHP Super Member
PHP Super Member
Posts: 240
Joined: 22/02/2011 11:48 am

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

Post by jataz2 » 01/08/2011 12:03 pm

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

Code: Select all

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

User avatar
jataz2
PHP Super Member
PHP Super Member
Posts: 240
Joined: 22/02/2011 11:48 am

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

Post by jataz2 » 01/08/2011 1:09 pm

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

Code: Select all

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

Code: Select all

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

User avatar
jataz2
PHP Super Member
PHP Super Member
Posts: 240
Joined: 22/02/2011 11:48 am

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

Post by 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" %>

Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “Programming - C/C++ & java & Python”

Who is online

Users browsing this forum: No registered users and 5 guests