명령문은 프로그램 섹션에 설명되어 있습니다. XmlWriter 클래스는 주로 XML 파일 생성에 사용됩니다.
다음은 관계형 데이터베이스에서 해당 XML 파일을 생성하는 과정이다. XML은 미들웨어일 뿐이므로 스키마나 DTD는 무시됩니다.
1개의 개인 무효 Page_Load(개체 전송자, System.EventArgs e)
2 {
3 //페이지를 초기화하려면 여기에 사용자 코드를 입력하세요.
4 //기본정보 정의
5 문자열 strTableName="systypes";
6 문자열 strConnection="서버=suntears;사용자 ID=sa;password=041210;database=webapplication1_db";
7 문자열 strSql=""+strTableName에서 *를 선택;
8 SqlConnection objConn=new SqlConnection(strConnection);
9 SqlDataAdapter objAdapter=새 SqlDataAdapter(strSql,objConn);
10 데이터세트 objDSet=새 데이터세트();
11 objAdapter.Fill(objDSet,"temp");
12 XmlTextWriter objXmlWriter;
13 문자열 strtemp1=Request.PhysicalApplicationPath;
14 문자열 strpath=strtemp1+"qiming.xml";
15 //XmlWriter를 초기화합니다. 이 클래스를 사용하여 XML 파일을 작성합니다.
16 objXmlWriter=new XmlTextWriter(strpath,null);
17 //처음에 XML 선언을 생성합니다.
18 objXmlWriter.WriteStartDocument();
19 //루트 요소 xml1 생성
20 objXmlWriter.WriteStartElement("xml1");
21 //테이블 이름은 요소 이름, 필드 이름은 속성, 테이블의 레코드는 속성 값입니다.
22 for(int i=0;i<objDSet.Tables["temp"].Rows.Count;i++)
스물셋 {
24 objXmlWriter.WriteStartElement("메뉴");
25 for(int j=0;j<objDSet.Tables["temp"].Columns.Count;j++)
26 {
27 //속성 쓰기
28 objXmlWriter.WriteAttributeString(objDSet.Tables["temp"].Columns[j].ColumnName,objDSet.Tables["temp"].Rows[i][j].ToString());
29 }
30 objXmlWriter.WriteEndElement();
31}
32 objXmlWriter.WriteEndElement();
33 objXmlWriter.WriteEndDocument();
34 //close 메소드를 사용하여 파일을 닫습니다. 그렇지 않으면 파일이 잠깁니다.
35 objXmlWriter.Close();
36 // 페이지에 결과를 표시합니다.
37 문자열 strXmlResult;
38 StreamReader objSR = File.OpenText(strpath);
39 strXmlResult = objSR.ReadToEnd();
40 objSR.닫기();
41 Response.Write("<pre>" + Server.HtmlEncode(strXmlResult) + "<pre>");
42 }
다음은 위 프로그램에서 생성된 XML 파일을 통해 관계형 데이터베이스를 생성하는 코드이다.
1 private void Page_Load(object sender, System.EventArgs e)
2 {
3 //페이지를 초기화하려면 여기에 사용자 코드를 입력하세요.
4 //기본정보 정의
5 int cx=1;
6 문자열 strConn="서버=suntears;사용자 ID=sa;비밀번호=;데이터베이스=xml_example";
7 문자열 Strappstr=Request.PhysicalApplicationPath;
8 문자열 strpath=strappstr+"qiming.xml";
9 문자열 strtablename="xml1";
10 문자열 strCreatetable="테이블 생성 "+strtablename+"(";
11 XmlTextReader objXmlReader=새 XmlTextReader(strpath);
12 SqlConnection objConn=new SqlConnection(strConn);
13 SqlCommand objCommand;
14 SqlDataAdapter objAdapter;
15 데이터세트 objDSet=new DataSet();
16 DataRow 개체;
17 XmlNodeType objNodeType;
18 //XmlReader 클래스를 사용하여 XML 파일 액세스 작업
19 //XmlReader는 풀 모드를 채택합니다. 따라서 각 노드는 Read() 메서드를 통해 반복됩니다.
20 동안(objXmlReader.Read())
스물 하나 {
22 objNodeType=objXmlReader.NodeType;
23 //노드 유형에 따라 다양한 작업을 수행합니다.
24 스위치(objNodeType)
25 {
26 //XML 파일 시작 부분에 선언
27 사례 XmlNodeType.XmlDeclaration:
28 Response.Write("11111"+objXmlReader.Name+"<br>");
29 휴식;
30 //일반 노드 유형
31개 사례 XmlNodeType.Element:
32 //속성 개수를 기준으로 루트 요소인지 판단
33 if(objXmlReader.AttributeCount>0)
34 {
35 //cx를 플래그 비트로 사용합니다. 루트가 아닌 요소 노드에 처음 접근할 때 요소 구조를 기반으로 데이터베이스 생성
36 만약(cx==1)
37 {
38 while(objXmlReader.MoveToNextAttribute())
39 {
40 strCreatetable=strCreatetable+objXmlReader.Name+" varchar(50), ";
41 }
42 strCreatetable=strCreatetable+")";
43 objCommand=새 SqlCommand(strCreatetable,objConn);
44 objConn.Open();
45 objCommand.ExecuteNonQuery();
46 objConn.Close();
47 objAdapter=new SqlDataAdapter("select * from "+strtablename,objConn);
48 objAdapter.Fill(objDSet,strtablename);
49 objXmlReader.MoveToFirstAttribute();
50 //플래그를 cx 값으로 변경
51cx=0;
52 }
53 //XML 파일의 데이터를 DataSet 객체에 덤프합니다.
54 objrow=objDSet.Tables[strtablename].NewRow();
55 objXmlReader.MoveToFirstAttribute();
56 for(int j=0;j<objXmlReader.AttributeCount;j++)
57 {
58 objrow[j]=objXmlReader.Value.ToString();
59 objXmlReader.MoveToNextAttribute();
60 }
61 objDSet.Tables[strtablename].Rows.Add(objrow);
62 }
63 휴식;
64}
65 }
66 //전송된 데이터 테이블 표시
67 DataGrid1.DataSource=objDSet.Tables[strtablename];
68 데이터그리드1.데이터바인드();
69 }데이터를 데이터베이스에 업데이트하는 코드는 작성되지 않았습니다. 직접 수행하세요^_^