다음을 통해 공유


System.Xml.XmlTextWriter 클래스

이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.

클래스는 XmlTextWriter 클래스를 XmlWriter 구현합니다.

참고 항목

새 기능을 활용하려면 메서드와 클래스를 XmlWriterSettings 사용하여 XmlWriter.Create 인스턴스를 만드는 XmlWriter 것이 좋습니다.

XmlTextWriter기본 현재 요소 스택에 정의된 모든 네임스페이스에 해당하는 네임스페이스 스택을 가져옵니다. 네임스페이스를 사용하여 XmlTextWriter 수동으로 선언할 수 있습니다.

w.WriteStartElement("root");
w.WriteAttributeString("xmlns", "x", null, "urn:1");
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteEndElement();

위의 C# 코드는 다음 출력을 생성합니다. XmlTextWriter 는 네임스페이스 선언을 루트 요소로 승격하여 두 자식 요소에 중복되지 않도록 합니다. 자식 요소는 네임스페이스 선언에서 접두사를 선택합니다.

<root xmlns:x="urn:1">
<x:item/>
<x:item/>
</x:root>

XmlTextWriter 또한 현재 네임스페이스 선언을 재정의할 수 있습니다. 다음 예제에서는 네임스페이스 URI "123"을 "abc"로 재정의하여 XML 요소를 <x:node xmlns:x="abc"/>생성합니다.

w.WriteStartElement("x","node","123");
w.WriteAttributeString("xmlns","x",null,"abc");

접두사를 인수로 사용하는 쓰기 메서드를 사용하여 사용할 접두사를 지정할 수도 있습니다. 다음 예제에서는 두 개의 서로 다른 접두사를 동일한 네임스페이스 URI에 매핑하여 XML 텍스트를 <x:root xmlns:x="urn:1"><y:item xmlns:y="urn:1"/></x:root>생성합니다.

XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
w.Close();

동일한 네임스페이스 URI XmlTextWriter 에 다른 접두사를 매핑하는 네임스페이스 선언이 여러 개 있는 경우 네임스페이스 선언 스택을 뒤로 이동하고 가장 가까운 네임스페이스 선언을 선택합니다.

XmlTextWriter w = new XmlTextWriter(Console.Out);
w.Formatting = Formatting.Indented;
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteAttributeString("attr","urn:1","123");
w.WriteEndElement();
w.WriteEndElement();
w.Close();

위의 C# 예제에서 호출은 WriteAttributeString 접두사를 지정하지 않으므로 작성기는 네임스페이스 스택에 푸시된 마지막 접두사를 사용하고 다음 XML을 생성합니다.

<x:root xmlns:x="urn:1">
<y:item y:attr="123" xmlns:y="urn:1" />
</x:root>

네임스페이스 충돌이 발생하면 XmlTextWriter 대체 접두사를 생성하여 해결합니다. 예를 들어 특성과 요소의 접두사는 같지만 네임스페이스는 XmlWriter 다른 경우 특성에 대한 대체 접두사를 생성합니다. 생성된 접두사 이름은 n{i}i 1부터 시작하는 숫자입니다. 숫자는 각 요소에 대해 1로 다시 설정됩니다.

네임스페이스 URI와 연결된 특성에는 접두사(기본 네임스페이스는 특성에 적용되지 않음)가 있어야 합니다. 이는 XML 권장 사항의 W3C 네임스페이스 섹션 5.2를 준수합니다. 특성이 네임스페이스 URI를 참조하지만 접두사를 지정하지 않으면 작성기는 특성에 대한 접두사를 생성합니다.

빈 요소를 작성할 때 태그 이름과 닫는 태그 사이에 추가 공백이 추가됩니다. 예를 들면 다음과 같습니다 <item />. 이렇게 하면 이전 브라우저와의 호환성이 제공됩니다.

메서드 String 매개 변수 null 로 사용되며 String.Empty 동일한 경우입니다. String.Empty 는 W3C 규칙을 따릅니다.

강력한 형식의 데이터를 작성하려면 클래스를 XmlConvert 사용하여 데이터 형식을 문자열로 변환합니다. 예를 들어 다음 C# 코드는 데이터를 변환 Double 하고 String 요소를 <price>19.95</price>씁니다.

Double price = 19.95;
writer.WriteElementString("price", XmlConvert.ToString(price));

XmlTextWriter는 다음에 대해 검사 않습니다.

  • 특성 및 요소 이름의 문자가 잘못되었습니다.
  • 지정된 인코딩에 맞지 않는 유니코드 문자입니다. 유니코드 문자가 지정된 인코딩 XmlTextWriter 에 맞지 않으면 유니코드 문자를 문자 엔터티로 이스케이프하지 않습니다.
  • 중복 특성입니다.
  • DOCTYPE 공용 식별자 또는 시스템 식별자의 문자입니다.

보안 고려 사항

다음 항목은 클래스를 사용할 때 고려해야 할 XmlTextWriter 사항입니다.

  • throw 된 예외는 XmlTextWriter 애플리케이션에 버블링 하지 않을 경로 정보가 노출 될 수 있습니다. 애플리케이션에서는 예외를 캐치하고 적절히 처리해야 합니다.

  • XmlTextWriter를 다른 애플리케이션에 전달하면 원본으로 사용하는 스트림이 해당 애플리케이션에 노출됩니다. XmlTextWriter를 부분 신뢰 애플리케이션에 전달해야 할 경우 XmlWriter 메서드에서 만든 Create 개체를 대신 사용해야 합니다.

  • 또는 XmlTextWriterWriteRaw 메서드에 WriteDocType 전달되는 데이터의 유효성을 검사하지 않습니다. 이러한 메서드에 임의의 데이터를 전달해서는 안 됩니다.

  • 기본 설정이 변경된 경우 생성된 출력이 올바른 형식의 XML 데이터라는 보장은 없습니다.

  • 신뢰할 수 없는 원본에서 개체와 같은 Encoding 지원 구성 요소를 허용하지 않습니다.