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

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


+ Recent posts