C# XML다루기2) XML 특정 조건일 때 특정 값 수정 하기 (Modify)

2021. 2. 24. 11:34C#

728x90
반응형

아래와 같은 xml이 존재할 때

GUID와 일치하는 GUID의 메모 내용을 수정하고 싶다면

Memo Element의 하위 Element 인

GUID 의 Attribute를 이용하여

if문으로 비교하여

content 내용을 수정하고자 하는 예제 입니다.


이미 존재 하는 xml ------- 두 번째 메모의 content 내용을 바꾸고 싶다.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<MemoLists>
  <Memo>
    <GUID value="687cd511-fa66-42ea-bce4-1cf50760d180" />
    <memo_title>Untitle-01</memo_title>
    <content>아무내용</content>
  </Memo>
  <Memo>
    <GUID value="e8918ff3-9360-4e43-a5b9-d545831277ab" />
    <memo_title>Untitle-01</memo_title>
    <content>아무내용</content>
  </Memo>
  <Memo>
    <GUID value="2fed3902-6edf-4d2a-bca5-95e3ca0b6fb6" />
    <memo_title>Untitle-01</memo_title>
    <content>아무내용</content>
  </Memo>
</MemoLists>





수정 버튼을 눌렀을 때 값이 수정 되도록 이벤트에 연결

/// <summary>
/// XML 수정하기
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
    // xml 존재 하는지 ? result : _blexist value return 
    if (_IsExistXML() == true)
    {
        XMLModify();
    }
    else
    {
        MessageBox.Show("경로에 XML 파일이 없습니다.");
    }

}

실제 xml 수정하는 코드

private void XMLModify()
{
    XDocument doc = XDocument.Load(_strXMLPath);

    var nodes = doc.Root.XPathSelectElements("//MemoLists//Memo").ToList();

    for (int i = 0; i < nodes.Count; i++)
    {
        if (nodes[i].Element("GUID").Attribute("value").Value.ToString() == "e8918ff3-9360-4e43-a5b9-d545831277ab")
        {
            nodes[i].Element("content").Value = "new value";
        }
    }

    doc.Save(_strXMLPath);

}





최종 결과 물


728x90
반응형