ASP.NET 노드추가 / 속성추가 / xml node 추가 / AppendChild


XML 사용시 노드 및 속성을 추가하는 경우에 사용가능하다.
여러가지 형태로 응용해서 함수를 생성해 두면, 많은 작업이 필요한 경우에 시간을 단축할 수 있다.



파일 유무체크 : http://gyunbox.tistory.com/101


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 public ActionResult XmlTest()
 {
     AddXmlNode("/images/xml/test.xml""PRODUCT/CONTENT_2""MYCHILD""CODE""0001");
     return View();
 }
 
 /// <summary>
 /// xml 노드 추가하는 함수
 /// </summary>
 /// <param name="xmlPath">xml 위치</param>
 /// <param name="targetPath">노드를 추가할 위치</param>
 /// <param name="childName">자식 노드 이름</param>
 /// <param name="attName">자식 노드의 속성 이름</param>
 /// <param name="attValue">자식노드의 속성 값</param>
 public void AddXmlNode(string xmlPath, string targetPath, string childName, string attName, string attValue)
 {
     XmlDocument xmlDoc;
     XmlElement childElement;
     XmlAttribute xmlAtb;
     XmlNode parentNode;
 
     xmlDoc = new XmlDocument();
     xmlDoc.Load(Server.MapPath(xmlPath)); //xml 파일 로드
 
     parentNode = xmlDoc.SelectSingleNode(targetPath); // 노드를 추가할 부모노드 찾기
 
     childElement = xmlDoc.CreateElement(childName); // 자식 노드 생성
 
     xmlAtb = xmlDoc.CreateAttribute(attName); // 자식 노드에 추가할 속성 생성
     xmlAtb.Value = attValue; // 자식 노드에 추가할 속성에 값 넣기
 
     childElement.SetAttributeNode(xmlAtb); // 자식노드에 속성 적용
 
     parentNode.AppendChild(childElement); // 자식노드를 부모노드에 추가!!
 
     xmlDoc.Save(Server.MapPath(xmlPath));
     xmlDoc = null;
 }
cs



[ ASP.NET ] XML 출력 / XML 형태로 출력하는 방법 / XML생성 / RESPONSE.CONTENTTYPE


URL로 요청을 받아서 xml 형태로 뿌려줘야 할 때가 종종 있는데, 

간단하게 아래와 같이 세팅해주면 웹 브라우져에서 xml형태로 출력되는 것을 알 수 있다.







-> cs


1
2
3
4
5
6
7
8
9
10
11
12
13
//xmlDoc선언.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0""utf-8""yes"));
 
//xmlDoc에 출력할 내용을 더함.
XmlElement goods = xmlDoc.CreateElement("GOOD_ARRAY");
goods.InnerText = "test"
xmlDoc.DocumentElement.AppendChild(goods);
 
//xml 형태로 화면에 출력.
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "text/xml";
xmlDoc.Save(Response.Output);
cs




-> aspx


1
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" ContentType="text/xml" %>
cs





 ASP.NET C# XML  노드추가하기 / XML CDATA 추가하는 방법 




XML을 사용하다보면 하나하나 엘리멘트 생성하여 추가하다보면 소스가 길어지기 마련이다.

다양한 방식으로 활용가능하기때문에, 아래와 같이 사용해보았다.








1. 사용


1
2
3
4
5
6
7
8
9
10
11
12
13
 
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0""utf-8""yes"));
 
xmlDoc = addNode(xmlDoc, """LIST""" ,"NEW");
xmlDoc = addNode(xmlDoc, "LIST", "WRITER", "당꿈응", "NEW");
 
for (int i = 0; i < 10; i++)
{
    XmlElement sList= xmlDoc.CreateElement("SUB_LIST");
    sList= addElement(xmlDoc, sList, "TITLE""TITLE_" + i + """ELEMENT");
    sList= addElement(xmlDoc, sList, "CONTENT""CONTENT_" + i , "CDATA");
    xmlDoc.DocumentElement.AppendChild(sList);
}
cs





2. 엘리멘트 추가

 -> XmlElement 를 전달받아서 자식 엘리먼트를 추가해서 리턴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private XmlElement addElement(XmlDocument xmlDoc, XmlElement reElement, string NodeName, string NodeText, string type)
{
    XmlElement Eadd = xmlDoc.CreateElement(NodeName);
    if (type == "ELEMENT")
    {
        if (NodeText != "")
        {
            XmlText TextStr = xmlDoc.CreateTextNode(NodeText);
            Eadd.AppendChild(TextStr);
        }
    }
    else if (type == "CDATA")
    {
        if (NodeText != "")
        {
            XmlCDataSection TextStr = xmlDoc.CreateCDataSection(NodeText);
            Eadd.AppendChild(TextStr);
        }
    }
    reElement.AppendChild(Eadd);
    return reElement;
}
cs




3. 노드추가

->XmlDocument를 전달받아 자식노드를 추가한 후 리턴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public XmlDocument addNode(XmlDocument xmlDoc, string targetNode ,  string cNodeName, string cNodeText , string cNodeType)
{
    XmlNode targetObj;                                      //자식을 추가할 상위노드 선언
    XmlElement childNode = xmlDoc.CreateElement(cNodeName); //자식 노드 생성
    childNode.InnerText = cNodeText;                        //자식노드 내용 넣기
    
    if (targetNode != "")
    {
        targetObj = xmlDoc.SelectSingleNode(targetNode);  //상위노드 선택
        targetObj.AppendChild(childNode);                 //노드 추가
 
        if (cNodeType == "NEW")
        {
            xmlDoc.AppendChild(targetObj); //추가할 노드 
        }
    }
    else
    {
        xmlDoc.AppendChild(childNode);
    }
 
    return xmlDoc;
}
 
cs



CreateElement / CreateCDataSection / CreateXmlDeclaration /AppendChild

공감과 댓글은 작성자에게 큰 힘이 됩니다. ^^





XML 통신

1.ASP.NET XML 전송 후 응답받기





 
1
2
3
4
5
6
7
8
9
10
11
        public ActionResult PostTest()
        {
            XmlDocument xmlObj = new XmlDocument();
            string xmlStr = "<Send><UserName>Colt</UserName><PassWord>Taylor</PassWord><Data>100</Data></Send>";
            xmlObj.LoadXml(xmlStr);
            string reqUrl = "http://hope20603-001-site1.smarterasp.net/xmlreq.asp";
            PostXMLTransaction(reqUrl, xmlObj);
 
            return View();
        }
 
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/// <summary>
        /// xml 통신
        /// </summary>
        /// <param name="xmlDoc"></param>
        /// <returns></returns>
        public static XmlDocument PostXMLTransaction(string v_strURL, XmlDocument v_objXMLDoc)
        {
            XmlDocument XMLResponse = null;
            HttpWebRequest objHttpWebRequest;
            HttpWebResponse objHttpWebResponse = null;
            Stream objRequestStream = null;
            Stream objResponseStream = null;
            XmlTextReader objXMLReader;
 
            objHttpWebRequest = (HttpWebRequest)WebRequest.Create(v_strURL);
 
            try
            {
                
 
                
                byte[] bytes;
                bytes = System.Text.Encoding.ASCII.GetBytes(v_objXMLDoc.InnerXml);
                objHttpWebRequest.Method = "POST";
                objHttpWebRequest.ContentLength = bytes.Length;
                objHttpWebRequest.ContentType = "text/xml; encoding='utf-8'";
                
                objRequestStream = objHttpWebRequest.GetRequestStream();
                objRequestStream.Write(bytes, 0, bytes.Length);
                objRequestStream.Close();
 
                objHttpWebResponse = (HttpWebResponse)objHttpWebRequest.GetResponse();
 
                if (objHttpWebResponse.StatusCode == HttpStatusCode.OK)
                {
                
                    objResponseStream = objHttpWebResponse.GetResponseStream();
                    objXMLReader = new XmlTextReader(objResponseStream);
                    
                    XmlDocument xmldoc = new XmlDocument();
                    xmldoc.Load(objXMLReader);
                    XMLResponse = xmldoc;
                    string response = XMLResponse.InnerText;
                    objXMLReader.Close();
                }
                
                objHttpWebResponse.Close();
            }
            catch (WebException we)
            {
                throw new Exception(we.Message);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                
                objRequestStream.Close();
                objResponseStream.Close();
                objHttpWebResponse.Close();
                
                objXMLReader = null;
                objRequestStream = null;
                objResponseStream = null;
                objHttpWebResponse = null;
                objHttpWebRequest = null;
            }
            
            return XMLResponse;
        }
cs

2. ASP XML데이터 받은 후 리턴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
<%
    Dim xmlDoc
    Dim userName
    set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
    xmlDoc.async="false"
    xmlDoc.load(Request)
    userName = xmlDoc.documentElement.selectSingleNode("UserName").firstChild.nodeValue
 
 
    response.contenttype="text/xml"
    response.write("<?xml version='1.0' encoding='euc-kr'?>")
    response.write("<booking_info xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>")
    response.write("    <error>[ "& userName &" ] </error>")
    response.write("</booking_info>")
 
 
%>
cs


+ Recent posts