C\#중 XmlTextWriter 읽 기 쓰기 xml 파일 상세 설명

11060 단어 XmlTextWriterxml
XmlTextWriter 클래스 는 XML 을 파일 에 쓸 수 있 도록 합 니 다.이 종 류 는 많은 방법 과 속성 을 포함 하고 있 으 며,이러한 속성 과 방법 을 사용 하면 XML 을 더욱 쉽게 처리 할 수 있다.이 종 류 를 사용 하기 위해 서 는 먼저 새로운 XmlTextWriter 대상 을 만 든 다음 XML 세 션 을 이 대상 에 추가 할 수 있 습 니 다.이 클래스 에는 다양한 종류의 XML 요 소 를 XML 파일 에 추가 하 는 방법 이 많이 포함 되 어 있 습 니 다.다음 표 는 이러한 방법의 이름과 설명 상황 을 보 여 줍 니 다.
방법. 설명 WriteStartDocument "1.0"버 전의 XML 성명 쓰기 WriteEndDocument 열 린 모든 요소 나 속성 닫 기 Close 흐름 닫 기 WriteDocType 지정 한 이름과 선택 가능 한 속성 을 가 진 DOCTYPE 성명 쓰기 StartElement 지정 한 시작 표시 쓰기 WriteEndElement Write FullEndElement 요소 닫 기 하나의 요 소 를 닫 고 끝 표 시 를 항상 기록 합 니 다.WriteElement String 문자열 값 을 포함 하 는 요소 쓰기 StartAttribute 쓰기 속성의 시작 내용 Write EndAttribute 이전 Write Start Attribute 호출 Write Raw 닫 기 원본 태그 수 동 쓰기 WriteString 문자열 쓰기 WriteAttributeString 지정 한 값 의 속성 을 가 진 WriteCData 지정 한 텍스트 를 포함 하 는블록 WriteComment 지정 한 텍스트 를 포함 하 는 주석 을 쓰 십시오WriteWhiteSpace 주어진 공백 쓰기 WriteProcessingInstruction 이름과 텍스트 사이 에 빈 칸 을 가 진 처리 명령 을 쓰 십시오.다음 과 같 습 니 다:
XML 에 익숙 하 다 면 위의 방법 들 을 잘 이해 할 수 있 을 것 이다.이 예 에서 우 리 는 먼저 문 서 를 만 들 고 요 소 를 추가 한 다음 에 이 문 서 를 닫 을 것 입 니 다.원 소 를 추가 하면 하위 요소,속성,기타 내용 도 추가 할 수 있 습 니 다.다음 코드 는 이러한 예 입 니 다.title 이라는 XML 파일 을 만 들 었 습 니 다.

using System;
using System.IO;
using System.Xml;
public class Sample
{
  public static void Main()
  {
     XmlTextWriter writer = new XmlTextWriter("titles.xml", null);
     //
     writer.WriteStartElement("items");
     //
     writer.WriteElementString("title", "Unreal Tournament 2003");
     writer.WriteElementString("title", "C&C: Renegade");
     writer.WriteElementString("title", "Dr. Seuss's ABC");
     // ,
     writer.WriteEndElement();
     // XML XmlTextWriter
     writer.Close(); 
  }
}
위의 코드 를 컴 파일 하고 실행 하면 이 XML 파일 을 만 들 것 입 니 다.파일 에는 다음 과 같은 내용 이 포함 되 어 있 습 니 다.

<items>
    <title>Unreal Tournament 2003</title>
    <title>C&amp;C: Renegade</title>
    <title>Dr. Seuss's ABC</title>
</items>
위의 코드 는 writer 라 는 XmlTextWriter 대상 을 만 들 었 습 니 다.이 대상 이 생 성 되 었 을 때 titles.xml 라 는 파일 에 연결 되 었 습 니 다.이 어 프로그램 은 items 라 는 루트 속성 을 만 들 었 고 Write StartElement 방법 은 이 속성의 시작 탭 을 만 들 었 습 니 다.이 어 프로그램 은 Write Element String 방법 을 호출 하여 세 개의 키 요 소 를 만 들 었 습 니 다.위의 코드 에서 볼 수 있 듯 이 이 방법 은 첫 번 째 매개 변수(위의 프로그램 에서 title)를 요소 의 태그 로 사용 합 니 다.두 번 째 매개 변 수 를 원소 의 값 으로 사용 합 니 다.모든 요 소 를 추가 한 후에 루트 요 소 를 닫 아야 합 니 다.이 때 Write EndElement 방법 으로 최근 에 열 린 요 소 를 닫 을 수 있 습 니 다.이 예 에서 최근 에 열 린 요 소 는 루트 요소 입 니 다.모든 데 이 터 를 다 썼 고 루트 요소 도 닫 혔 을 때 XmlTextWriter 에 정 보 를 전송 할 수 있 습 니 다.이 때 는 Close 방법 으로 닫 을 수 있다 는 뜻 이다.
위의 코드 는 상대 적 으로 매우 간단 하 다.다음은 XmlTextWriter 류 에서 더 많은 방법 을 사용 하고 기능 이 더욱 완 선 된 예 를 보 자.

using System;
using System.IO;
using System.Xml;
public class Sample
{
  public static void Main()
  {
     XmlTextWriter writer = new XmlTextWriter("myMedia.xml", null);
     //
     writer.Formatting = Formatting.Indented;
     //
     writer.WriteStartElement("items");
     //
     writer.WriteStartElement("item");
     //
     writer.WriteAttributeString("rating", "R");
     //
     writer.WriteElementString("title", "The Matrix");
     writer.WriteElementString("format", "DVD");
     // item
     writer.WriteEndElement();  //
     //
     writer.WriteWhitespace("
");
     //
     writer.WriteRaw("<item>" +
                     "<title>BloodWake</title>" +
                     "<format>XBox</format>" +
                     "</item>");
     //
     writer.WriteRaw("
  <item>
" +
                     "    <title>Unreal Tournament 2003</title>
" +
                     "    <format>CD</format>
" +
                     "  </item>
");
     //
     writer.WriteFullEndElement();
     // XML writer
     writer.Close();
  }
}
위의 코드 컴 파일 이 실 행 된 후 my Media.xml 파일 을 얻 을 수 있 습 니 다.파일 의 내용 은:

 <items>
  <item rating="R">
    <title>The Matrix</title>
    <format>DVD</format>
  </item>
<item>
    <title>BloodWake</title>
    <format>XBox</format>
</item>
  <item>
    <title>Unreal Tournament 2003</title>
    <format>CD</format>
  </item>
</items>
위의 코드 중의 주석 은 이 프로그램의 기능 이 어떻게 실현 되 었 는 지 설명 한다.기억 해 야 할 것 은 호출 방법 이 조작 을 시작 할 때 프로그램의 적당 한 곳 에서 호출 방법 으로 이 조작 을 끝내 야 한 다 는 것 이다.예 를 들 어 StartElement 를 호출 하면 EndElement 를 호출 하여 요 소 를 닫 아야 합 니 다.물론 이 두 호출 사이 에 너 도 키 요 소 를 넣 을 수 있다.언제든지 EndElement 방법 을 사용 하면 최근 에 StartElement 방법 으로 열 린 요 소 를 닫 습 니 다.(이것 은 스 택 작업 방식 과 비슷 합 니 다.)
XmlTextWriter 를 사용 하 는 것 은 매우 쉽 지만,나 는 네가 직접 이 코드 와 방법 을 시험 해 보 는 것 을 건의 한다.네가 시험 해 본 후에 이 코드 들 이 너의 프로그램 에 쉽게 집 적 될 수 있다 는 것 을 발견 할 수 있 을 것 이다.XmlTextWriter 는.NET 이 제공 하 는 수많은 XML 류 중 하나 일 뿐 이라는 것 을 기억 해 야 한다.XmlTextWriter 와 마찬가지 로 다른 XML 클래스 도 쉽게 사용 할 수 있 습 니 다.
 
2)저 는 아주 어 리 석 은 방법 을 사용 하지만 초보 자 들 이 XML 노드 를 방문 하 는 과정 을 이해 하 는 데 도움 을 줄 수 있 습 니 다.XML 파일(bookstore.xml)이 다음 과 같이 알려 져 있 습 니 다.

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
</bookstore>
1.노드 에노드 를 삽입 합 니 다.

   XmlDocument xmlDoc=new XmlDocument();
   xmlDoc.Load("bookstore.xml");
   XmlNode root=xmlDoc.SelectSingleNode("bookstore");// <bookstore>
   XmlElement xe1=xmlDoc.CreateElement("book");// <book>
   xe1.SetAttribute("genre"," ");// genre
   xe1.SetAttribute("ISBN","2-3631-4");// ISBN

   XmlElement xesub1=xmlDoc.CreateElement("title");
   xesub1.InnerText="CS ";//
   xe1.AppendChild(xesub1);// <book>
   XmlElement xesub2=xmlDoc.CreateElement("author");
   xesub2.InnerText=" ";
   xe1.AppendChild(xesub2);
   XmlElement xesub3=xmlDoc.CreateElement("price");
   xesub3.InnerText="58.3";
   xe1.AppendChild(xesub3);

   root.AppendChild(xe1);// <bookstore>
   xmlDoc.Save("bookstore.xml");
결 과 는:

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
  <book genre=" " ISBN="2-3631-4">
    <title>CS </title>
    <author> </author>
    <price>58.3</price>
  </book>
</bookstore>
2.노드 수정:genre 속성 값 을'이 찬 홍'노드 의 genre 값 을'update 이 찬 홍'으로 바 꾸 고 이 노드 의 하위 노드텍스트 를'아승'으로 수정 합 니 다.

   XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;// bookstore
   foreach(XmlNode xn in nodeList)//
   {
    XmlElement xe=(XmlElement)xn;// XmlElement
    if(xe.GetAttribute("genre")==" ")// genre “ ”
    {
     xe.SetAttribute("genre","update ");// “update ”

     XmlNodeList nls=xe.ChildNodes;// xe
     foreach(XmlNode xn1 in nls)//
     {
      XmlElement xe2=(XmlElement)xn1;//
      if(xe2.Name=="author")//
      {
       xe2.InnerText=" ";//
       break;//
      }
     }
     break;
    }
   }

   xmlDoc.Save("bookstore.xml");// 。
마지막 결 과 는:

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
  <book genre="update " ISBN="2-3631-4">
    <title>CS </title>
    <author> </author>
    <price>58.3</price>
  </book>
</bookstore>
3.노드 의 genre 속성 을 삭제 하고노드 를 삭제 합 니 다.

XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;

   foreach(XmlNode xn in xnl)
   {
    XmlElement xe=(XmlElement)xn;
    if(xe.GetAttribute("genre")=="fantasy")
    {
     xe.RemoveAttribute("genre");// genre
    }
    else if(xe.GetAttribute("genre")=="update ")
    {
     xe.RemoveAll();//
    }
   }
   xmlDoc.Save("bookstore.xml");
마지막 결 과 는:

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
  <book>
  </book>
</bookstore>
4.모든 데 이 터 를 표시 합 니 다.

 XmlNode xn=xmlDoc.SelectSingleNode("bookstore");

   XmlNodeList xnl=xn.ChildNodes;

   foreach(XmlNode xnf in xnl)
   {
    XmlElement xe=(XmlElement)xnf;
    Console.WriteLine(xe.GetAttribute("genre"));//
    Console.WriteLine(xe.GetAttribute("ISBN"));

    XmlNodeList xnf1=xe.ChildNodes;
    foreach(XmlNode xn2 in xnf1)
    {
     Console.WriteLine(xn2.InnerText);//
    }
   }

좋은 웹페이지 즐겨찾기