http://www.dotnetjohn.com/articles.aspx?articleid=173


using System.IO;

using System.Xml;

using System.Xml.Serialization;


    /// <summary>

    /// Method to convert a custom Object to XML string

    /// </summary>

    /// <param name="pObject">Object that is to be serialized to XML</param>

    /// <returns>XML string</returns>

    public String SerializeObject ( Object pObject )

    {

        try

        {

            String XmlizedString = null;

            MemoryStream memoryStream = new MemoryStream ( );

            XmlSerializer xs = new XmlSerializer ( typeof ( Animal ) );

            XmlTextWriter xmlTextWriter = new XmlTextWriter ( memoryStream, Encoding.UTF8 );

 

            xs.Serialize ( xmlTextWriter, pObject );

            memoryStream = ( MemoryStream ) xmlTextWriter.BaseStream;

            XmlizedString = UTF8ByteArrayToString ( memoryStream.ToArray ( ) );

            return XmlizedString;

        }

        catch ( Exception e )

        {

            System.Console.WriteLine ( e );

            return null;

        }

    }



    /// <summary>

    /// Method to reconstruct an Object from XML string

    /// </summary>

    /// <param name="pXmlizedString"></param>

    /// <returns></returns>

    public Object DeserializeObject ( String pXmlizedString )

    {

        XmlSerializer xs = new XmlSerializer ( typeof ( Automobile ) );

        MemoryStream memoryStream = new MemoryStream ( StringToUTF8ByteArray ( pXmlizedString ) );

        XmlTextWriter xmlTextWriter = new XmlTextWriter ( memoryStream, Encoding.UTF8 );

 

        return xs.Deserialize ( memoryStream );

    }


Serialize 시에 엔터 값를 그대로 받으려면 XmlTextWriter를 제외하고 사용.

XmlTextWriter를 사용 했을 때 xml 문자열이 한줄로 쭉 작성 됨.


'.NET > SampleCode' 카테고리의 다른 글

CreateUpdateQuery()  (1) 2008.04.28
[BL] Insert 모듈  (1) 2008.04.28

AND


/* 일반적인 방법 */
ALTER FUNCTION [dbo].[FN_Split] (
    @str        NVARCHAR(MAX)     -- 원본 문자열
  , @Delimeter  CHAR(1)   = '|'  -- 구분기호(Default '|')
)
RETURNS @SplitedResult TABLE (
    Idx INT IDENTITY(1,1) PRIMARY KEY -- 결과 배열 인덱스
  , Val NVARCHAR(MAX)                 -- 인덱스에 해달하는 결과 문자열
) AS
BEGIN
    -- Declare index
    DECLARE @Idx            INT
    -- Sets the index initialize
    SET @Idx = -1;

    SET @str = ISNULL(@str, '')
    SET @Delimeter = ISNULL(@Delimeter, '|')

    WHILE (LEN(@str) > 0)
    BEGIN
        SET @Idx = CHARINDEX(@Delimeter , @str) ;

        IF (@Idx = 0) AND (LEN(@str) > 0)
        BEGIN
            INSERT INTO @SplitedResult VALUES (RTRIM(LTRIM(@str))) ;
            BREAK ;
        END

        IF (@Idx > 1)
        BEGIN
            INSERT INTO @SplitedResult VALUES (RTRIM(LTRIM(LEFT(@str, @Idx - 1)))) ;
            SET @str = RIGHT(@str, (LEN(@str) - @Idx)) ;
        END
        ELSE
            SET @str = RIGHT(@str, (LEN(@str) - @Idx)) ;
    END

    RETURN
END


/* XML을 이용한 방법 */
IF OBJECT_ID('dbo.Split') IS NOT NULL
    DROP FUNCTION dbo.Split GO
CREATE FUNCTION dbo.Split(@data VARCHAR(MAX), @delimiter VARCHAR(1))
RETURNS TABLE
AS
BEGIN
    DECLARE @textXML XML;
    SELECT    @textXML = CAST('<d>' + REPLACE(@data, @delimiter, '</d><d>') + '</d>' AS XML);

    RETURN (SELECT  T.split.value('.', 'nvarchar(max)') AS data
            FROM    @textXML.nodes('/d') T(split))
END

Some test results:
--------------------------------
Number of Items: 100,000
SplitString Time: 46 ms
Xml2IntList Time: 983 ms
--------------------------------
Number of Items: 10,000
SplitString Time: 40 ms
Xml2IntList Time: 93 ms
--------------------------------
Number of Items: 1,000
SplitString Time: 38 ms
Xml2IntList Time: 15 ms
--------------------------------
Number of Items: 100
SplitString Time: 25 ms
Xml2IntList Time: 1.5 ms
--------------------------------

AND



SELECT
       memoIdx,
       STUFF((
             SELECT ',' + cast(memIdx as varchar(3))
             FROM    MemoReceive b
             WHERE   b.memoIdx = a.memoIdx
             FOR XML PATH('')
        ),1,1,'') AS NAME
FROM MemoReceive a 


FOR XML PATH('') 가 핵심
STUFF는 합쳐진 문자열 맨 앞의 ',' 를 제거하는 역활

'SQL > MS-SQL' 카테고리의 다른 글

[SQL] Split 구현하기  (8) 2010.01.27
[SQL] 다중 조건 처리하기  (4) 2009.12.28
MS-SQL 2005에서 페이징 처리  (2) 2008.04.28

AND