XML을 로드하거나 구문 분석하는 동안 공백 유지(LINQ to XML)

이 문서에서는 LINQ to XML의 공백 동작을 제어하는 방법을 설명합니다.

일반적인 시나리오는 들여쓴 XML을 읽고 공백 텍스트 노드 없이 메모리 내 XML 트리를 만든 다음(공백을 유지하지 않음), XML에 대한 작업을 수행하고 들여쓰기를 사용하여 XML을 저장하는 것입니다. 서식이 있는 XML을 serialize하는 경우 XML 트리의 유효 공백만 유지됩니다. 이는 LINQ to XML의 기본 동작입니다.

다른 일반적인 시나리오는 이미 의도적으로 들여쓴 XML을 읽고 수정하는 것입니다. 이 들여쓰기를 변경하려고 하지 않을 수 있습니다. LINQ to XML에서 이 작업을 수행하려면 XML을 로드하거나 구문 분석할 때 공백을 유지하고 XML을 직렬화할 때 서식 지정을 사용하지 않도록 설정합니다.

이 문서에서는 XML 트리를 채우는 메서드의 공백 동작에 대해 설명합니다. XML 트리를 serialize할 때 공백을 제어하는 방법에 대한 자세한 내용은 serialize할 때 공백 유지를 참조하세요.

XML 트리를 채우는 메서드의 동작

XElementXDocument 클래스의 다음 메서드는 XML 트리를 채웁니다. 파일, TextReader, XmlReader 또는 문자열에서 XML 트리를 채울 수 있습니다.

메서드가 LoadOptions를 인수로 사용하지 않으면 메서드는 중요하지 않은 공백을 유지하지 않습니다.

대부분의 경우 메서드에서 LoadOptions를 인수로 사용하면 XML 트리의 텍스트 노드로 무효 공백을 선택적으로 유지할 수 있습니다. 그러나 메서드가 XmlReader에서 XML을 로드하는 경우에는 XmlReader가 공백을 유지할지 여부를 결정합니다. PreserveWhitespace를 설정해도 아무런 영향을 주지 않습니다.

이러한 메서드를 사용하는 경우 공백이 유지되면 무효 공백이 XML 트리에 XText 노드로 삽입됩니다. 공백이 유지되지 않으면 텍스트 노드가 삽입되지 않습니다.

XmlWriter를 사용하여 XML 트리를 만들 수 있습니다. XmlWriter에 쓴 노드가 트리에 채워집니다. 그러나 이 메서드를 사용하여 XML 트리를 빌드하면 노드가 공백인지 여부나 유효한지 여부에 관계없이 모든 노드가 유지됩니다.