본문 바로가기

.net

Xml네임스페이스 "http://tempuri.org/"

A.xml

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">
  <projOrderInfo>
    <ORDR>
      <F_ORDR_CODE>3333333</F_ORDR_CODE>
      <F_PROJ_CODE>20080514006297</F_PROJ_CODE>
      <F_PROJ_PRICE>800</F_PROJ_PRICE>
      <F_ORDR_CNTS>2</F_ORDR_CNTS>
    </ORDR>

  </projOrderInfo>
</string>



 

B.xml

<?xml version="1.0" encoding="utf-8"?>
<string>
  <projOrderInfo>
    <ORDR>
      <F_ORDR_CODE>3333333</F_ORDR_CODE>
      <F_PROJ_CODE>20080514006297</F_PROJ_CODE>
      <F_PROJ_PRICE>800</F_PROJ_PRICE>
      <F_ORDR_CNTS>2</F_ORDR_CNTS>
    </ORDR>

  </projOrderInfo>
</string>


위 xml의 차이점은 Root노드 "string"에 네임스페이스의 유무다.

위 xml의 F_ORDR_CODE의 값을 수정하여 보자

소스(B.xml)
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath(A.xml 또는 B.xml));

   
XmlNode node = doc.SelectSingleNode
("/descendant::string/projOrderInfo/ORDR/F_ORDR_CODE");
if (node != null)
{
  node.InnerText = "1111";
}

doc.Save(Server.MapPath(A.xml 또는 B.xml));


위 소스는 일반적인 DOM을 이용한 xml수정소스입니다.

그렇다면 실행결과는...A.xml은 수정이 되지않고 B.xml만 수정된다.

A.xml을 수정하려면 아래와 같은 형태로 소스를 수정해야 한다.

소스(A.xml)

XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("A.xml"));

   
XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable);
     nsMgr.AddNamespace("temp", "http://tempuri.org/");
XmlNode node = doc.SelectSingleNode("//temp:F_ORDR_CODE", nsMgr);
if (node != null)
{
  node.InnerText = "1111";
}

doc.Save(Server.MapPath("A.xml"));

MSDN XmlNamespaceManager클래스 

'.net' 카테고리의 다른 글

Image Resizing  (0) 2008.12.23
Xml 수정하기(update)  (0) 2008.07.08
ASP.NET 디렉토리(directory) 복사  (1) 2008.07.04