c에서 xml을 처리하는 방법. XML 문서를 여는 방법 - XML ​​파일 작업 기능. 자식 요소가 있는 XML 요소 만들기




확장 가능한 마크업 언어(XML). 문서의 구조 및 기타 기능을 설명하기 위해 사용자 지정 태그를 사용하는 텍스트 파일일 뿐입니다.

XML이란 무엇인가

XML사람과 기계가 읽을 수 있는 문서의 인코딩 구문을 정의하기 위해 W3C(World Wide Web Consortium)에서 만든 마크업 언어입니다. 문서의 구조와 문서 저장 및 전송 방법을 정의하는 태그를 사용하여 이를 수행합니다.

가장 쉽게 비교할 수 있는 방법은 친숙한 다른 마크업 언어와 비교하는 것입니다. 하이퍼텍스트 마크업(HTML) 웹 페이지를 인코딩하는 데 사용됩니다. HTML은 웹 페이지의 콘텐츠 형식을 설명하는 미리 정의된 마크업 문자(짧은 코드) 집합을 사용합니다.

그러나 XML 간의 차이점은 확장 가능하다는 것입니다. XML에는 HTML과 같은 미리 정의된 마크업 언어가 없습니다. 대신 XML을 사용하면 사용자가 자신의 마크업 문자를 만들어 내용을 설명하고 무제한의 자체 정의 문자 집합을 형성할 수 있습니다.

기본적으로 HTML은 콘텐츠 표시에 중점을 둔 언어인 반면 XML은 데이터를 저장하는 데 사용되는 전용 데이터 설명 언어입니다.

XML은 수백 가지가 있는 다른 문서 형식의 기초로 자주 사용됩니다. 다음은 알고 싶은 몇 가지 사항입니다.

  • RSS 및 ATOM은 애플리케이션이 피드를 처리하는 방법을 설명합니다.
  • Microsoft .NET은 구성 파일에 XML을 사용합니다.
  • Microsoft Office는 XML을 문서 구조의 기초로 사용합니다.

따라서 XML 파일이 있는 경우 그것이 어떤 애플리케이션을 위한 것인지 반드시 알려주는 것은 아닙니다. 그러나 XML 파일을 개발하는 경우가 아니면 이에 대해 걱정할 필요가 없습니다.

XML 파일을 여는 방법

XML 파일을 직접 여는 방법에는 여러 가지가 있습니다. 텍스트 편집기로 열고 편집할 수 있으며, 웹 브라우저에서 보거나 보고, 편집하고, 다른 형식으로 변환할 수도 있는 웹 사이트를 사용할 수 있습니다.

XML로 정기적으로 작업할 때 텍스트 편집기 사용

XML 파일은 일반 텍스트 파일이므로 모든 텍스트 편집기에서 열 수 있습니다. 그러나 메모장과 같은 많은 텍스트 편집기는 XML 파일을 올바른 구조로 표시하도록 설계되지 않았습니다. 이는 XML 파일의 내용에 빠르게 익숙해지는 데 유용할 수 있습니다. 그러나 작업에 더 편리한 도구가 있습니다.


웹 브라우저를 사용하여 XML 파일 보기

XML 파일을 편집할 필요는 없지만 내용만 확인하면 되는 경우 브라우저에서 작업을 처리할 수 있습니다. 또한 웹 브라우저는 이미 표준 XML 뷰어로 설정되어 있을 가능성이 큽니다. 따라서 XML 파일을 두 번 클릭하면 브라우저에서 열어야 합니다.

그렇지 않은 경우 파일을 마우스 오른쪽 버튼으로 클릭하여 다른 응용 프로그램에서 열 수 있는 옵션을 찾을 수 있습니다. 프로그램 목록에서 웹 브라우저를 선택하기만 하면 됩니다.

파일이 열리면 잘 구성된 데이터가 표시됩니다. Notepad++에서 보는 색상만큼 예쁘지는 않지만 메모장보다 훨씬 낫습니다.

XML 파일용 온라인 편집기 사용

임의의 XML 파일을 편집하고 싶고 새 텍스트 편집기를 다운로드하고 싶지 않거나 xml 파일을 다른 형식으로 변환, 무료로 사용할 수 있는 몇 가지 괜찮은 온라인 XML 편집기가 있습니다.

TutorialsPoint.com, XMLGrid.net 및 CodeBeautify.org - XML ​​파일을 보고 편집할 수 있습니다. 편집이 완료되면 수정된 XML 파일을 업로드하거나 다른 형식으로 변환할 수도 있습니다.

CodeBeautify.org를 예로 들어 보겠습니다. 페이지는 세 부분으로 나뉩니다. 왼쪽에는 작업 중인 XML 파일이 있습니다. 중간에 여러 기능이 있습니다. 오른쪽에는 선택할 수 있는 일부 옵션의 결과가 표시됩니다.

예를 들어 아래 이미지에서 전체 XML 파일은 왼쪽에 있고 가운데에 있는 트리 보기 버튼을 클릭했기 때문에 결과 창에 트리 보기가 표시됩니다.

찾아보기 버튼을 사용하여 컴퓨터에서 XML 파일을 로드하거나 URL 로드 버튼을 사용하여 인터넷 소스에서 XML을 검색합니다.

트리 보기 버튼은 모든 태그가 주황색으로 강조 표시되고 속성이 태그 오른쪽에 있는 결과 창의 올바른 형식의 트리 구조로 데이터를 표시합니다.

Beatify는 깔끔하고 읽기 쉬운 방식으로 데이터를 표시합니다.

최소화 버튼은 최소한의 공간을 사용하여 데이터를 표시합니다. 이 함수는 모든 단일 데이터를 한 줄에 배치합니다. 이것은 파일을 더 작게 만들려고 할 때 유용하여 약간의 공간을 절약할 수 있습니다.

마지막으로 XML to JSON 버튼을 사용하여 XML을 JSON 형식으로 변환하고 CSV로 내보내기 버튼을 사용하여 데이터를 쉼표로 구분된 값 파일로 저장하거나 다운로드 버튼을 사용하여 변경 사항을 다운로드할 수 있습니다. 새 XML 파일. .

XML에 대해 들어봤을 것이며 조직에서 XML을 사용해야 하는 많은 이유가 있습니다. 그러나 XML이 정확히 무엇입니까? 이 문서에서는 XML이 무엇이며 어떻게 작동하는지 설명합니다.

이 기사에서

마크업, 마크업 및 태그

XML을 이해하려면 데이터에 레이블을 지정하는 방법을 기억하는 것이 좋습니다. 문서는 수세기 동안 사람들에 의해 만들어졌으며 이 모든 시간 동안 사람들은 문서에 메모를 해왔습니다. 예를 들어, 교사는 단락 이동, 문장을 더 명확하게 만들기, 철자 오류 수정 등의 필요성을 나타내기 위해 종종 학생의 작업을 표시합니다. 문서를 표시하면 정보의 구조, 의미 및 모양을 결정할 수 있습니다. Microsoft Office Word에서 수정을 사용해 본 적이 있다면 전산화된 주석 형식에 익숙할 것입니다.

정보 기술의 세계에서 "태깅"이라는 용어는 "마크업"이라는 용어가 되었습니다. 마크업은 태그(때로는 토큰)라는 코드를 사용하여 데이터의 구조, 시각적 모양 및 의미(XML의 경우)를 정의합니다.

이 기사의 HTML 텍스트는 컴퓨터 마크업 사용의 좋은 예입니다. Microsoft Internet Explorer에서 이 페이지를 마우스 오른쪽 버튼으로 클릭하고 HTML 코드 보기, 읽을 수 있는 텍스트와 다음과 같은 HTML 태그가 표시됩니다.

그리고

. HTML 및 XML 문서에서 태그는 꺾쇠 괄호로 묶여 있기 때문에 인식하기 쉽습니다. 이 기사의 소스 코드에서 HTML 태그는 각 단락의 시작과 끝을 정의하는 것과 같은 많은 기능을 수행합니다(

...

) 및 도면의 위치.

XML의 특징

HTML 및 XML 형식의 문서에는 태그로 묶인 데이터가 포함되어 있지만 두 언어 간의 유사점은 여기서 끝납니다. HTML 형식에서 태그는 제목의 위치, 단락의 시작 등 데이터의 표시를 정의합니다. XML 형식에서 태그는 데이터의 구조와 의미를 정의합니다.

데이터의 구조와 의미를 설명할 때 여러 가지 방법으로 재사용할 수 있습니다. 예를 들어 각 요소가 명확하게 정의된 판매 데이터 블록이 있는 경우 필요한 요소만 판매 보고서에 로드하고 나머지 데이터는 회계 데이터베이스로 전송할 수 있습니다. 즉, 하나의 시스템을 사용하여 데이터를 생성하고 XML 형식으로 태그를 지정한 다음 클라이언트 플랫폼이나 운영 체제에 관계없이 다른 시스템에서 이 데이터를 처리할 수 있습니다. 이러한 상호 운용성은 XML을 가장 널리 사용되는 데이터 교환 기술 중 하나의 근간으로 만듭니다.

작업 시 다음 사항에 유의하십시오.

    XML 대신 HTML을 사용할 수 없습니다. 그러나 XML 데이터는 HTML 태그로 래핑되어 웹 페이지에 표시될 수 있습니다.

    HTML 기능은 모든 사용자에게 공통된 미리 정의된 태그 집합으로 제한됩니다.

    XML 규칙을 사용하면 데이터 및 해당 구조를 설명하는 데 필요한 모든 태그를 만들 수 있습니다. 애완 동물에 대한 정보를 저장하고 공유해야 한다고 가정해 보겠습니다. 이렇게 하려면 다음 XML 코드를 만들 수 있습니다.

    이지 시암 사람 6 아니요 Izz138bod 콜린 윌콕스

보시다시피 XML 태그는 보고 있는 데이터를 명확하게 보여줍니다. 예를 들어 고양이에 대한 데이터임이 분명하고 이름, 나이 등을 쉽게 확인할 수 있으며 거의 ​​모든 데이터 구조를 정의하는 태그를 생성할 수 있으므로 XML은 확장 가능합니다.

그러나 이 예제의 태그를 HTML 파일의 태그와 혼동하지 마십시오. 예를 들어 위의 XML 텍스트를 HTML 파일에 붙여넣고 브라우저에서 열면 결과는 다음과 같습니다.

Izzy Siamese 6 예 아니오 Izz138bod Colin Wilcox

웹 브라우저는 XML 태그를 무시하고 데이터만 표시합니다.

잘 구성된 데이터

IT 부서의 누군가가 "올바른 형식의" XML 파일에 대해 이야기하는 것을 들어보셨을 것입니다. 잘 구성된 XML 파일은 매우 엄격한 규칙을 따라야 합니다. 이러한 규칙을 따르지 않으면 XML이 작동하지 않습니다. 예를 들어 이전 예에서 각 시작 태그에는 해당하는 종료 태그가 있으므로 이 예는 올바른 형식의 XML 파일에 대한 규칙 중 하나를 따릅니다. 파일에서 태그를 제거하고 Office 프로그램 중 하나에서 열려고 하면 오류 메시지가 표시되고 해당 파일을 사용할 수 없게 됩니다.

올바른 형식의 XML 파일을 만들기 위한 규칙을 알 필요는 없지만(이해하기 쉬움) 올바른 형식의 XML 데이터만 다른 응용 프로그램 및 시스템에서 사용할 수 있다는 점을 기억하십시오. XML 파일이 열리지 않으면 형식이 잘못된 것일 수 있습니다.

XML은 플랫폼 독립적입니다. 즉, XML을 사용하도록 구축된 모든 프로그램은 하드웨어나 운영 체제에 관계없이 XML 데이터를 읽고 처리할 수 있습니다. 예를 들어 올바른 XML 태그를 사용하면 데스크톱 프로그램을 사용하여 메인프레임에서 받은 데이터를 열고 처리할 수 있습니다. 또한 XML 데이터를 만든 사람에 관계없이 다양한 Office 응용 프로그램에서 데이터 작업이 가능합니다. 상호 운용성으로 인해 XML은 데이터베이스와 사용자 컴퓨터 간에 데이터를 교환하는 데 가장 널리 사용되는 기술 중 하나가 되었습니다.

잘 구성된 태그가 지정된 데이터 외에도 XML 시스템은 일반적으로 스키마와 변환이라는 두 가지 추가 구성 요소를 사용합니다. 다음 섹션에서는 작동 방식을 설명합니다.

계획

"계획"이라는 용어에 겁먹지 마십시오. 스키마는 단순히 XML 데이터 파일의 내용에 대한 규칙을 포함하는 XML 파일입니다. 스키마 파일은 일반적으로 .xsd 확장자를 가지며 XML 데이터 파일은 .xml 확장자를 사용합니다.

스키마를 사용하면 프로그램이 데이터의 유효성을 검사할 수 있습니다. 그들은 데이터의 구조를 형성하고 작성자와 다른 사람들이 이해할 수 있도록 합니다. 예를 들어 사용자가 날짜 필드의 텍스트와 같이 유효하지 않은 데이터를 입력하면 프로그램에서 사용자에게 이를 수정하라는 메시지를 표시할 수 있습니다. XML 파일의 데이터가 스키마의 규칙과 일치하는 경우 XML을 지원하는 모든 프로그램을 사용하여 데이터를 읽고 해석하고 처리할 수 있습니다. 예를 들어, 아래 그림과 같이 Excel은 데이터를 검증할 수 있습니다. CAT 체계를 준수하기 위해.

스키마는 복잡할 수 있으며 이 문서에서 스키마를 만드는 방법을 설명하는 것은 불가능합니다. (조직에 이를 수행하는 방법을 알고 있는 IT 직원이 있을 수도 있습니다.) 그러나 다이어그램이 어떻게 생겼는지 아는 것이 도움이 됩니다. 다음 스키마는 태그 집합에 대한 규칙을 정의합니다. ... :

예제가 이해가 안 되더라도 걱정하지 마십시오. 다음 사항에 주의하십시오.

    예제 스키마의 인라인 요소를 선언이라고 합니다. 색상이나 특수 기능과 같은 동물에 대한 추가 세부 정보가 필요한 경우 IT 부서는 스키마에 적절한 선언을 추가합니다. XML 시스템은 비즈니스 요구 사항이 발전함에 따라 변경될 수 있습니다.

    선언은 데이터 구조를 제어하는 ​​강력한 방법입니다. 예를 들어, 광고 같은 태그를 의미 그리고 , 위의 순서여야 합니다. 선언은 또한 사용자 입력 유형을 확인할 수 있습니다. 예를 들어, 위의 스키마에서는 ALTERED 및 DECLAWED 태그에 대한 cat 및 부울(TRUE 또는 FALSE)의 나이에 대해 양의 정수가 필요합니다.

    XML 파일의 데이터가 스키마 규칙을 준수하면 데이터가 유효하다고 합니다. XML 데이터 파일이 스키마 규칙을 준수하는지 확인하는 프로세스를 (논리적으로 충분히) 유효성 검사라고 합니다. 스키마 사용의 큰 장점은 데이터 손상을 방지할 수 있다는 것입니다. 또한 이러한 문제가 발생하면 XML 파일 처리가 중지되기 때문에 스키마를 사용하면 손상된 데이터를 쉽게 찾을 수 있습니다.

변환

위에서 설명한 것처럼 XML을 사용하면 데이터를 효율적으로 사용하고 재사용할 수도 있습니다. 데이터 재사용 메커니즘을 XSLT 변환(또는 간단히 변환)이라고 합니다.

사용자(또는 IT 부서)는 변환을 사용하여 데이터베이스 사이와 같은 백엔드 시스템 사이에서 데이터를 교환할 수도 있습니다. 데이터베이스 A가 판매 부서에 유용한 테이블에 판매 데이터를 가지고 있다고 가정합니다. 데이터베이스 B는 수입 및 지출 데이터를 회계용으로 특별히 설계된 테이블에 저장합니다. 데이터베이스 B는 변환을 사용하여 데이터베이스 A에서 데이터를 가져와 적절한 테이블에 넣을 수 있습니다.

데이터 파일, 스키마 및 변환의 조합은 기본 XML 시스템을 형성합니다. 다음 그림은 이러한 시스템의 작동을 보여줍니다. 데이터 파일은 스키마 규칙에 대해 검사된 다음 변환을 위해 적절한 방식으로 제출됩니다. 이 경우 변환은 웹 페이지의 테이블에 데이터를 배치합니다.

다음 예는 데이터를 로드하는 변환을 보여줍니다. 웹 페이지의 테이블에. 예제의 요점은 변환을 생성하는 방법을 설명하는 것이 아니라 변환이 취할 수 있는 형식 중 하나를 보여주는 것입니다.

이름 새끼를 낳다 나이 변경 발톱이 빠진 특허 소유자

이 예는 변환 유형 중 하나의 텍스트가 어떻게 생겼는지 보여주지만, 데이터에서 필요한 것에 대한 명확한 설명으로 자신을 제한할 수 있으며 이 설명은 자신의 언어로 수행할 수 있습니다. 예를 들어 IT 부서에 가서 지난 2년 동안 특정 지역의 판매 데이터를 인쇄해야 하며 이 정보는 이러저러해야 한다고 말할 수 있습니다. 그런 다음 부서 전문가가 요청을 이행하기 위해 변환을 작성(또는 수정)할 수 있습니다.

Microsoft와 점점 더 많은 다른 회사들이 XML 사용을 훨씬 더 편리하게 만드는 다양한 작업을 위한 변환을 만들고 있습니다. 앞으로는 사용자 지정이 거의 또는 전혀 없이 필요에 맞는 변환을 다운로드하는 것이 가능할 것입니다. 이는 시간이 지남에 따라 XML 사용 비용이 점점 낮아질 것임을 의미합니다.

Microsoft Office 시스템의 XML

Office Professional 버전은 XML에 대한 향상된 지원을 제공합니다. 2007 Microsoft Office System부터 Microsoft Office는 DOCX, XLSX 및 PPTX와 같은 XML 기반 파일 형식을 사용합니다. XML은 자체 이진 형식이 아닌 텍스트 형식으로 데이터를 저장하기 때문에 클라이언트는 로열티를 지불하지 않고도 자체 스키마를 정의하고 다양한 방법으로 데이터를 사용할 수 있습니다. 새 형식에 대한 자세한 내용은 Open XML 형식 및 파일 이름 확장자를 참조하세요. 아래는 기타 혜택입니다.

이 모든 것이 훌륭하지만 스키마가 없는 XML 데이터가 있는 경우에는 어떻게 해야 할까요? 사용 중인 Office 프로그램에 따라 다릅니다. 예를 들어 Excel에서 스키마 없이 XML 파일을 열면 스키마가 존재한다고 가정하고 데이터를 XML 테이블로 로드할 수 있습니다. XML 목록 및 테이블을 사용하여 데이터를 정렬, 필터링 및 계산할 수 있습니다.

Office에서 XML 도구 활성화

기본적으로 개발자 탭은 표시되지 않습니다. Office에서 XML 명령을 사용하려면 리본에 추가해야 합니다.

이전 기사에서는 XML과 관련된 일반적인 개념에 대해 설명했습니다. 이 기사에서는 XML 파일에서 변경, 추가, 검색과 관련된 기본 작업을 수행하는 방법을 배웁니다.

예제에 사용된 XML 파일입니다.

마쯔다 2007 BMW 2009

XML 돔

현재 파일에는 다음 구조가 포함되어 있습니다.

노드 사이의 관계 XML DOM, 기본 순간:

1. DOM 트리의 모든 노드에는 상위 ParentNode 가 있습니다. 이 예에서 garage는 두 car 요소의 부모이고 두 car 요소는 차례로 model 및 year 요소의 부모입니다.

자동차 xml 요소의 부모를 얻는 방법은 무엇입니까?

Console.WriteLine(elmRoot["자동차"].ParentNode.Name); //결과: 차고

2. 부모는 ChildNodes 자식을 가질 수 있습니다. 예를 들어 차고 노드의 경우 두 자동차 요소가 모두 자식입니다. 자동차 요소에는 모델 및 연도 하위 항목도 있습니다.

자식노드는 모든 자식 xml 요소를 저장하는 컬렉션입니다. 원하는 요소에 액세스하려면 인덱스를 지정해야 합니다. (인덱스는 항상 0부터 시작합니다!)

예를 들어 첫 번째 하위 요소를 얻는 방법은 무엇입니까?

ElmRoot.ChildNodes;

3. 일상 생활에서와 마찬가지로 아이는 첫 번째 FirstChild 또는 마지막 LastChild로 태어날 수 있습니다.

자동차 요소를 예로 들면

FirstChild는 모델입니다. LastChild는 연도입니다.

4. 차례로 자식 요소 사이에도 연결이 있으며 실생활과 유사점을 그리면 형제 또는 자매가 될 수 있습니다.

예를 들어 자녀는 이전 형제 형제와 다음 형제 다음 형제를 가질 수 있습니다.

Console.WriteLine(elmRoot.ChildNodes.FirstChild.NextSibling.Name); //결과: 연도 Console.WriteLine(elmRoot.ChildNodes.LastChild.PreviousSibling.Name); //결과: 모델

요소를 찾을 수 없으면 NullReferenceException 예외가 발생하므로 xml로 작업할 때 항상 try catch 블록을 사용하십시오.

Console.WriteLine(elmRoot.ChildNodes.LastChild.NextSibling.Name); Console.WriteLine(elmRoot.ChildNodes.FirstChild.PreviousSibling.Name);

LastChild는 NextSibling입니다.
FirstChild는 PreviousSibling입니다.

위에서 설명한 방법을 사용하면 원하는 노드로 쉽게 이동하여 필요한 값을 얻을 수 있습니다.

xml 요소의 값을 얻는 방법은 무엇입니까?

xml 요소의 값은 InnerText 속성을 사용하여 얻을 수 있습니다. 예를 들면 다음과 같습니다.

Console.WriteLine(elmRoot["자동차"].FirstChild.InnerText); //결과: 마쯔다

xml 요소의 동일한 값을 얻는 또 다른 방법:

Console.WriteLine(elmRoot.FirstChild.FirstChild.InnerText); //결과: 마쯔다

DOM 트리를 통해 이동하는 순서:

차고 -> 자동차 -> 모델 -> Mazda

연도 확인:

ElmRoot["자동차"].LastChild.InnerText; //결과: 2007

하위 시퀀스:

차고 -> 자동차 -> 연식 -> 2007년

또 다른 예: 동일한 결과를 얻는 3가지 방법.

Console.WriteLine(elmRoot.LastChild.FirstChild.InnerText); Console.WriteLine(elmRoot["자동차"].NextSibling.FirstChild.InnerText); Console.WriteLine(elmRoot.ChildNodes.Item(1).FirstChild.InnerText); //결과: BMW

값이 Mazda인 요소의 연도를 얻으려면 다음을 수행하십시오.

Console.WriteLine(elmRoot.FirstChild.LastChild.InnerText); //결과: 2007

BMW의 경우(두 가지 방법으로 동일한 결과를 얻음)

Console.WriteLine(elmRoot.ChildNodes.Item(1).ChildNodes.Item(1).InnerText); Console.WriteLine(elmRoot.ChildNodes.ChildNodes.InnerText); //결과: 2009

xml 요소의 값을 변경하는 방법은 무엇입니까?

속성 사용 내부 텍스트() xml 요소의 값을 가져오고 변경할 수 있습니다(예: 연도 변경).

//새 값 설정 elmRoot.FirstChild.LastChild.InnerText = "2010"; //새 값을 콘솔 화면에 출력 Console.WriteLine(elmRoot.FirstChild.ChildNodes.Item(1).InnerText); //결과: 2010

동시에 가상 xml 파일에서 모든 변경 사항이 발생한다는 사실을 기억해야 합니다. 실제 파일을 열면 2007년이 여전히 표시되어 있음을 알 수 있습니다.

변경 사항을 적용하려면 예를 들어 Save 메서드를 사용해야 합니다.

ElmRoot.Save("xml 파일 이름 또는 스트림");

이제 "물리적" xml 파일에서 정보가 변경됩니다.

하위 요소의 수를 얻는 방법은 무엇입니까?

Console.WriteLine(elmRoot.FirstChild.ChildNodes.Count);

차고 -> 자동차에는 2명의 하위 항목이 포함됩니다: 모델 및 연도

Console.WriteLine(elmRoot.FirstChild.FirstChild.ChildNodes.Count);

차고 -> 자동차 -> 모델에는 1개의 xml 하위 요소가 있습니다.

하위 요소에 액세스

색인으로

ElmRoot.ChildNodes.Name; elmRoot.ChildNodes.Name; //결과: 자동차

루프로

Foreach (elmRoot.ChildNodes의 XmlNode 끄덕임) ( Console.WriteLine(nod.Name); ) //결과: 자동차, 자동차

xml 요소의 이름을 얻는 방법은 무엇입니까?

elmRoot.Name; //결과: 차고

새 XML 요소 만들기

다른 두 개(자동차)와 구별하기 위해 XML 문서에 새 요소를 만들어 버스라고 하겠습니다.

새 요소를 만들 때 msdn 사이트의 권장 사항을 사용하고 표준 새 XmlElement 대신 CreateElement 메서드를 사용합니다.

XmlElement elm = xmlDoc.CreateElement("버스");

새 xml 요소 생성 및 추가

"BUS"라는 새 xml 요소를 만들어 보겠습니다.

XmlElement elmRoot = xmlDoc.DocumentElement; Console.WriteLine(elmRoot.ChildNodes.Count); //자동차, 자동차 XmlElement elmNew = xmlDoc.CreateElement("버스"); elmRoot.AppendChild(elmNew); Console.WriteLine(elmRoot.ChildNodes.Count); //3 car, car, bus xmlDoc.Save("xml 파일 이름");

설명:

1. 먼저 새 요소를 추가할 루트 요소를 가져옵니다.

2. 테스트로 차고 요소의 현재 자식 수를 인쇄합니다: 2(car 및 car)

3. 새로운 BUS 요소 생성

4. 방법 사용 AppendChild트리에 새 요소 추가

5. 수표를 다시 사용하고 차고 요소의 현재 요소 수를 표시합니다. 이제 자동차, 자동차, 버스의 3가지 요소가 있습니다.

6. 변경 사항이 실제 파일에 영향을 미치도록 저장합니다.

XML 파일 자체에서 새 요소는 다음과 같습니다.

새 xml 요소를 추가하는 방법은 무엇입니까?

작업: 새 XML 요소를 만들고 여기에 제조 연도와 같은 일부 텍스트 콘텐츠를 추가합니다.

String strFilename = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = 새 XmlDocument(); xmlDoc.Load(strFilename); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmNew = xmlDoc.CreateElement("버스"); XmlText new_txt = xmlDoc.CreateTextNode("2006"); elmRoot.AppendChild(elmNew); elmRoot.LastChild.AppendChild(new_txt); Console.WriteLine(elmRoot.ChildNodes.Name); //버스 Console.WriteLine(elmRoot.ChildNodes.LastChild.InnerText); //2006 Console.Read();

XML 파일:

2006

명확성을 위해

이제 자동차와 동일한 아키텍처로 "버스" 노드를 생성해 보겠습니다. 즉, 노드(모델, 연도 및 일부 텍스트 콘텐츠)를 추가합니다.

자식 요소가 있는 XML 요소 만들기

string strFilename = @"C:\lessons\Auto.xml"; //메모리에 새 XML 문서 생성 XmlDocument xmlDoc = new XmlDocument(); //xml 파일을 메모리에 로드 xmlDoc.Load(strFilename); //루트 요소 가져오기 XmlElement elmRoot = xmlDoc.DocumentElement; //3개의 요소 생성: 버스, 모델, 연도 XmlElement elmBUS = xmlDoc.CreateElement("bus"); XmlElement elmModel = xmlDoc.CreateElement("모델"); XmlElement elmYear = xmlDoc.CreateElement("연도"); //요소 값 설정: 모델, 연도 XmlText year_txt = xmlDoc.CreateTextNode("2006"); //XmlText mod_txt = xmlDoc.CreateTextNode("liaz"); 그렇지 않으면 추가 //버스 요소에 두 개의 하위 요소 추가: 모델 및 연도 elmBUS.AppendChild(elmModel); elmBUS.AppendChild(elmYear); //모델 및 연도 노드에 값 추가 elmModel.InnerText = "liaz"; elmYear.AppendChild(year_txt); //새 xml 요소 버스를 트리에 추가 elmRoot.AppendChild(elmBUS); //모든 항목이 제대로 추가되었는지 확인 Console.WriteLine(elmRoot.ChildNodes.FirstChild.InnerText); Console.WriteLine(elmRoot.LastChild.LastChild.InnerText); //모든 것이 정상이면 Save 메서드를 사용합니다. xmlDoc.Save("xml 파일 이름");

결과:

리아즈 2006

이 코드를 어떻게 줄일 수 있습니까? 예를 들면 다음과 같습니다.

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = 새 XmlDocument(); xmlDoc.Load(PathXmlFile); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmBUS = xmlDoc.CreateElement("버스"); XmlElement elmModel = xmlDoc.CreateElement("모델"); XmlElement elmYear = xmlDoc.CreateElement("연도"); //모델 및 연도 노드에 값 추가 elmModel.InnerText = "liaz"; elmYear.InnerText = "2006"; elmBUS.AppendChild(elmModel); elmBUS.AppendChild(elmYear); elmRoot.AppendChild(elmBUS); //모든 것이 정확하면 Save 메서드를 호출합니다. xmlDoc.Save("xml 파일 이름");

코드를 조금 더 줄여 보겠습니다. 이를 위해 InnerXml 속성을 사용합니다.

XmlDocument xmlDoc = 새 XmlDocument(); xmlDoc.Load(PathXmlFile); XmlElement elmXML = xmlDoc.CreateElement("버스"); 문자열 txt=" 리아즈" + "2006"; //InnerXml! elmXML.InnerXml = txt; //xmlDoc.DocumentElement(garage와 같음)는 XmlElement와 같은 루트 요소에 액세스하는 또 다른 방법입니다. elmRoot = xmlDoc.DocumentElement; xmlDoc.DocumentElement.AppendChild( elmXML) ;xmlDoc.Save(PathXmlFile);

결과

GetElementByTagName으로 요소 목록 가져오기

GetElementByTagName 반환 XmlNodeList, 지정된 요소에 속하는 모든 하위 요소를 포함합니다. 예를 들어 차고에 저장된 모든 자동차 모델을 가져와야 합니다.

XmlDocument xmlDoc = 새 XmlDocument(); xmlDoc.Load(strFilename); XmlNodeList modelName = xmlDoc.GetElementsByTagName("모델"); foreach (modelName의 XmlNode 노드) ( Console.WriteLine(node.InnerText); ) //결과: mazda, bmw, liaz

인덱스로 참조하기:

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = 새 XmlDocument(); xmlDoc.Load(PathXmlFile); XmlNodeList modelName = xmlDoc.GetElementsByTagName("모델"); Console.WriteLine(modelName.InnerText); //결과: 리아즈

GetElementByTagName 메서드를 사용하여 새로 만든 "버스" 요소의 텍스트 내용을 어떻게 변경할 수 있습니까?

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = 새 XmlDocument(); xmlDoc.Load(PathXmlFile); XmlNodeList modelName = xmlDoc.GetElementsByTagName("모델"); Console.WriteLine(modelName.InnerText); //값 가져오기: liaz

또는 이름을 liaz로 Ikarus로 변경할 수 있습니다.

Console.WriteLine(modelName.InnerText = "이카루스");

.NET 애플리케이션을 개발할 때 XML 데이터 작업에 대해 이야기하겠다고 약속한 지 꽤 오래되었습니다. 약속은 반드시 지켜야 합니다. 이 문서는 전문 .NET 개발자를 위한 것이 아니라 .NET 응용 프로그램을 만드는 데 아직 상당한 경험이 없는 사람들을 위한 것입니다.


XML로 작업해야 하는 이유는 무엇입니까?

여전히 XML이 무엇인지 잘 모르겠다면 "KV" No. 2007에서 "XML is for real and for a long time" 기사를 읽어 보시기 바랍니다. 보다 중요한 사항을 위한 공간을 절약하기 위해 여기서는 XML 형식 자체를 구문 분석하지 않습니다.

프로그램 코드에 익숙해지기 전에 한 가지 기본적인 질문에 답해야 합니다. 왜 응용 프로그램에 XML 지원을 포함해야 합니까? 나는 많은 기술에 대해 많은 사람들이 스스로에게 이 질문을 했다고 생각하며, 답변 후 응용 프로그램에 모두 포함되지는 않았습니다. 그러나 XML에서는 상황이 약간 다르며 많은 상황에서 이 형식을 사용해야 하는 실질적인 이유가 있습니다.

XML의 가장 큰 장점은 기본적으로 텍스트 형식이지만 모든 데이터를 완벽하게 저장하고 전송할 수 있다는 것입니다. 이 형식은 텍스트이기 때문에 교차 플랫폼 특성의 문제는 자체적으로 해결되고 XML 데이터 전달 문제는 쉽게 해결됩니다(예를 들어 SOAP에서 수행됨). 또한 새 속성을 추가하여 전송 또는 저장 형식을 쉽게 변경할 수 있으며 이전 버전을 사용하는 애플리케이션은 새 태그에 주의를 기울이지 않고도 필요한 것을 읽을 수 있으므로 이전 버전의 형식과의 호환성에 대해 너무 걱정하지 않아도 됩니다. 또는 속성. . 많은 응용 프로그램이 XML 기반 파일 형식을 사용하고 많은 통신 프로토콜도 XML 기반이며 두 가지 목록이 계속 증가하고 있습니다.

물론 반면에 XML은 경제적이지 않습니다. Computer News 포럼 방문자 중 한 사람이 올바르게 지적한 것처럼 XML 문서는 종종 10%의 데이터와 90%의 태그로 구성되기 때문입니다. 그러나 이미 선택한 태그에 따라 크게 달라집니다. 당신은 쓸 수 있습니다 성. 멜니카이트, 2, 내가 할 수 . 솔직히 말해서 현재의 하드 드라이브와 두꺼운 채널을 사용하면 특별히 축소할 필요가 없는 것 같습니다.

따라서 유능한 사람의 손에 XML은 강력하고 편리한 것입니다. 이 형식의 편재성 때문에 아무데도 갈 수 없습니다. 이제 프로그램 코드 작성으로 넘어 갑시다.

프로그래밍을 위해 .NET 플랫폼의 기본 언어인 C#을 사용합니다. 가능한 한 많은 독자들이 위의 프로그램 코드를 스스로 연습할 수 있도록 C#의 첫 번째 버전과 .NET Framework "a.


데이터 기록

먼저 데이터 작성에 대해 이야기해 보겠습니다. 왜냐하면 어딘가에서 무언가를 읽으려면 먼저 어딘가에 무언가를 작성해야 하기 때문입니다. 그리고 우리가 프로그래밍에 참여하자마자 "핸들"로 XML 데이터를 만드는 것은 적절하지 않습니다. 따라서 먼저 XML로 데이터 쓰기를 처리해 보겠습니다.

시작하려면 Visual Studio, #Develop 또는 C# Builder에서 새 프로젝트를 만들고 가져온 네임스페이스 목록에 System.Xml을 추가합니다.

특수 XmlTextWriter 클래스는 .NET Framework에서 XML 데이터를 작성하는 역할을 하며, 이를 통해 XML 데이터를 임의의 스트림에 쓸 수 있습니다. 인터넷을 통해 누군가에게 보낼 수 있지만 지금은 모든 것을 파일에 씁니다. 개체 생성자를 변경하여 출력을 리디렉션할 수 있습니다(즉, 초기화 중에 파일 이름과 해당 인코딩이 아니라 데이터 스트림인 개체를 전달함). ). 제 생각에는 조금 앞서가고 있는 것 같습니다. 먼저 XML 파일에 데이터를 쓰는 코드를 살펴보겠습니다.

String FileName = "c:\\demo.xml"; XmlTextWriter xml = new XmlTextWriter(파일 이름, System.Text.Encoding.Unicode); xml.Formatting = Formatting.Indented; xml.WriteStartDocument(); xml.WriteStartElement("루트 요소"); for (int i = 0; i< 10; i++) { xml.WriteStartElement("subelement"); xml.WriteAttributeString("attrib1", "value1"); xml.WriteAttributeString("attrib2", i.ToString()); for (int j = 0; j < 10; j++){ xml.WriteStartElement("subsubelement"); xml.WriteAttributeString("attr", j.ToString()); xml.WriteEndElement(); } xml.WriteEndElement(); } xml.WriteEndElement(); xml.WriteEndDocument(); xml.Close();

제 생각에 첫 번째 줄은 매우 분명합니다. 데이터를 저장할 파일 이름의 기록일 뿐입니다. 다음으로 XmlTextWriter 유형의 개체(보시다시피 xml이라고 함)를 만들고 이 개체를 사용하여 모든 추가 작업을 수행합니다. 개체를 구성할 때 XML이 작성될 인코딩도 지정합니다. 이 예에서는 유니코드입니다. 일반적으로 다음 줄은 필요하지 않지만 XML 문서를 사람이 읽을 수 있도록 만듭니다. 즉, 필요한 들여 쓰기를 추가하고 줄로 나눕니다. 이 기능이 없으면 전체 문서가 한 줄에 작성되므로 공간이 절약되지만 실제로 수동 편집에 적합하지 않습니다.

문서 작성은 xml 개체의 WriteStartDocument() 메서드를 호출하는 것으로 시작됩니다. 그 다음 줄은 루트 요소 "rootelement"를 XML 문서에 추가합니다(XML 문서의 경우 루트 요소는 단일 인스턴스에 있어야 함). 다음으로 루프에서 XML 문서에 의미론적 부하를 전달하지 않는 요소를 10개 더 추가합니다. 각 요소에 대해 두 개의 특성과 10개의 하위 요소를 설정합니다. 데이터를 명시적으로 변환하지 않고 문자열에 숫자를 추가할 수 있지만 숫자가 완전히 문자열을 형성해야 하는 경우 ToString() 메서드를 통해 명시적으로 변환해야 합니다. 또한 XML 문서의 각 요소를 명시적으로 닫은 다음 전체 문서를 닫아야 합니다.

이제 XML 문서가 성공적으로 작성되었으므로 문서에서 데이터를 읽는 방법을 살펴보겠습니다.


데이터 읽기

XML 파일을 읽은 결과를 추적할 수 있도록 응용 프로그램의 형식에 listBox 구성 요소를 추가합니다(물론 콘솔 형식이 아닌 경우). 음, 프로그램이 콘솔이면 출력을 콘솔로 쉽게 리디렉션할 수 있습니다.

평소와 같이 먼저 프로그램 코드에 대해 알게 된 다음 이 코드가 정확히 무엇을 하는지 살펴보겠습니다.

XmlTextReader xml = new XmlTextReader(파일 이름); xml.WhitespaceHandling = WhitespaceHandling.None; 정수 i = 0; while (xml.Read())( if ((xml.NodeType == XmlNodeType.Element) & (xml.Name == "하위 요소")) ( listBox1.Items.Add("하위 요소 " + i + " 발견됨") ; i++; listBox1.Items.Add(" " + xml.GetAttribute("attrib1")); listBox1.Items.Add(" " + xml.GetAttribute("attrib2")); 동안 (xml.Read()&( xml.Name == "하위 요소"))( listBox1.Items.Add(" " + xml.GetAttribute("attr")); ) ) ) xml.Close();

이미 알고 계시겠지만 읽기에는 XmlTextReader라는 다른 클래스를 사용하고 있습니다. 데이터를 작성하는 데 사용한 클래스와 동일한 네임스페이스에 있습니다. 첫 번째 줄에서 xml이라는 이름의 XmlTextReader 인스턴스를 생성합니다.(여기서는 FileName 변수가 이전에 이미 정의되었다고 가정합니다.) 빈 줄을 건너뛰려면 새로 만든 XML 파일에서 이해할 수 없는 방식으로 발생하는 경우 다음을 사용합니다. 위의 코드 스니펫에서 다음 행입니다. 변수 i는 데이터를 읽고 있는 XML 파일에서 발견된 "하위 요소" 요소의 수를 계산하는 데 사용됩니다.

다음은 파일에서 데이터를 직접 읽는 주기입니다. Read() 메서드는 XML 문서의 다음 요소를 읽고 읽은 후 정확히 무엇을 읽었는지 확인합니다. 실제로 "하위 요소"인 경우 읽은 요소에 대한 정보를 listBox1에 추가하고 읽은 요소의 수를 포함하는 변수를 증가시킨 다음 요소의 속성을 읽습니다. 속성을 읽은 후 "subsubelement" 하위 요소(이를 위해 별도의 XmlTextReader가 필요하지 않음)와 이러한 하위 요소의 속성을 읽기 위한 별도의 루프를 구성합니다. 이전과 마찬가지로 모든 읽기 정보를 listBox1에 입력하여 제어합니다. 올바른 독서.

XML 파일을 읽을 때도 쓸 때와 마찬가지로 XmlTextReader "a를 구성할 때 읽을 스트림을 매개변수로 지정하면 파일에서 뿐만 아니라 읽을 수도 있고, 그러나 또한 다른 소스에서, 그 예는 위에서 이미 제공했습니다. XmlTextReader 클래스의 유용한 기능 중 하나는 읽을 때 읽을 수 있는 전체 XML 문서를 메모리에 로드하지 않으므로 구문 분석에 사용하는 것이 편리합니다. 큰 XML 문서(예: XML 데이터베이스).


무대 뒤에서

일반적으로 방금 분석한 예는 실제 프로젝트에 너무 간단합니다. 요즘에는 XML 문서를 읽을 때 원칙적으로 DTD, XML Schema 또는 Relax NG를 사용하여 유효성을 검사합니다. 유효성 검사는 XML 문서의 마크업이 외부 파일에 설명된 일부 표준을 준수하는지 확인하는 것입니다. 문서 확인이 프로그램 알고리즘에 고정되어 있지 않고 데이터를 읽거나 쓰는 프로그램 코드를 업데이트하지 않고 데이터 형식을 변경할 때 임의로 변경할 수 있도록 유효성 검사가 필요합니다. 불행히도 이제 검증을 분석할 시간이 없습니다. 아시다시피 신문 기사의 양에는 특정 제한이 있기 때문입니다.

XML 데이터 작업에 관한 또 다른 흥미롭고 유용한 실용적인 점은 XSL 데이터 변환입니다. 이 변환은 HTML 페이지에 표시될 때 데이터에 적용되며 실제로는 특정 웹 페이지 템플릿을 일부 데이터가 포함된 XML 파일에 적용한 것입니다. 어떤 식으로든 현재 XML 데이터 사용의 가장 큰 몫은 월드 와이드 웹에 있기 때문에 XSL 변환을 고려하는 것이 매우 좋을 것입니다.

따라서이 기사는 계속 될 것이라고 생각합니다. 물론 귀하 (즉, Computer News 독자)가 포럼이나 내 이메일 주소로 보낸 편지에서 이에 대해 질문하는 경우에만 가능합니다. 지금은 .NET 응용 프로그램에서 XML을 사용하는 방법이 전부일 것입니다. 이 정보가 도움이 되길 바랍니다.