Aspose.Words문서 개체 모델(DOM)

Aspose.Words문서 개체 모델(DOM)은 단어 문서의 메모리 내 표현입니다. Aspose.WordsDOM을 사용하면 워드 문서의 내용과 서식을 프로그래밍 방식으로 읽고 조작하고 수정할 수 있습니다.

이 섹션에서는Aspose.WordsDOM의 주요 클래스와 그 관계에 대해 설명합니다. Aspose.WordsDOM클래스를 사용하여 문서 요소 및 서식에 대한 프로그래밍 방식으로 액세스할 수 있습니다.

문서 개체 트리 만들기

문서가Aspose.WordsDOM로 읽히면 객체 트리가 만들어지고 소스 문서의 다른 유형의 요소는 다양한 속성을 가진 자체DOM트리 객체를 가지고 있습니다.

빌드 문서 노드 트리

Aspose.Words이 단어 문서를 메모리로 읽으면 다양한 문서 요소를 나타내는 다른 유형의 개체를 만듭니다. 텍스트,단락,테이블 또는 섹션의 모든 실행은 노드이며 문서 자체도 노드입니다. Aspose.Words은 모든 문서 노드 유형에 대한 클래스를 정의합니다.

Aspose.Words의 문서 트리는 복합 디자인 패턴을 따릅니다:

  • 모든 노드 클래스는 궁극적으로Aspose.Words문서 개체 모델의 기본 클래스인Node클래스에서 파생됩니다.
  • 다른 노드(예:Section또는Paragraph)를 포함할 수 있는 노드는CompositeNode클래스에서 파생되며,이는Node클래스에서 파생됩니다.

아래에 제공된 다이어그램은Aspose.Words문서 개체 모델(DOM)의 노드 클래스 간의 상속을 보여줍니다. 추상적인 클래스의 이름은 이태리로 표시되어 있습니다.

aspose-words-dom

의 예를 살펴 보자. 다음 이미지는 콘텐츠 형식이 다른Microsoft Word문서를 보여 줍니다.

document-example

위의 문서를Aspose.WordsDOM로 읽을 때 아래 스키마와 같이 개체 트리가 생성됩니다.

document-example-dom

Document, Section, Paragraph, Table, Shape, Run, 그리고 다이어그램의 다른 모든 타원은 단어 문서의 요소를 나타내는Aspose.Words개체입니다.

Node유형 {#get-a-node-type}을 가져옵니다.

Node클래스는 서로 다른 노드를 구별하기에 충분하지만,Aspose.Words는 특정 유형의 노드를 선택하는 것과 같은 일부API작업을 단순화하기 위해NodeType열거를 제공합니다.

각 노드의 유형은NodeType속성을 사용하여 얻을 수 있습니다. 이 속성은NodeType열거형 값을 반환합니다. 예를 들어,Paragraph클래스로 표현된 단락 노드는NodeType.Paragraph을 반환하고,Table클래스로 표현된 테이블 노드는NodeType.Table를 반환합니다.

다음 예제에서는NodeType열거형을 사용하여 노드 유형을 가져오는 방법을 보여 줍니다:

문서 트리 탐색

Aspose.Words은 노드 간에 이동할 수 있는 노드 트리로 문서를 나타냅니다. 이 섹션에서는Aspose.Words에서 문서 트리를 탐색하고 탐색하는 방법을 설명합니다.

문서 탐색기에서 앞에서 설명한 예제 문서를 열면 노드 트리가Aspose.Words에 표시된 대로 정확하게 나타납니다.

document-in-document-explorer

문서 노드 관계

트리의 노드들은 그들 사이에 관계를 가지고 있습니다.:

  • 다른 노드를 포함하는 노드는parent.
  • 부모 노드에 포함 된 노드는child.동일한 부모의 자식 노드는sibling노드입니다.
  • root노드는 항상Document노드입니다.

다른 노드를 포함할 수 있는 노드는CompositeNode클래스에서 파생되며 모든 노드는 궁극적으로Node클래스에서 파생됩니다. 이 두 기본 클래스는 트리 구조 탐색 및 수정에 대한 일반적인 메서드와 속성을 제공합니다.

다음UML개체 다이어그램은 샘플 문서의 여러 노드와 부모,자식 및 형제 속성을 통해 서로 관계를 보여 줍니다:

document-nodes-relationships

문서는 노드 소유자입니다

노드는 트리에서 방금 생성되거나 제거되었더라도 항상 특정 문서에 속합니다.왜냐하면 스타일과 목록과 같은 중요한 문서 전체 구조가Document노드에 저장되기 때문입니다. 예를 들어,각 단락에 문서에 대해 전역적으로 정의된 할당된 스타일이 있기 때문에Document없이Paragraph을 사용할 수 없습니다. 이 규칙은 새 노드를 만들 때 사용됩니다. DOM에 직접 새Paragraph을 추가하려면 생성자에 전달된 문서 개체가 필요합니다.

DocumentBuilder을 사용하여 새 단락을 만들 때 빌더는 항상DocumentBuilder.Document속성을 통해 연결된Document클래스를 갖습니다.

다음 코드 예제에서는 노드를 만들 때 노드를 소유할 문서가 항상 정의된다는 것을 보여 줍니다:

부모 노드

각 노드에는 ParentNode 속성으로 지정된 부모가 있습니다. 노드에는 부모 노드가 없습니다. 즉, 다음의 경우 ParentNode은 null입니다.

  • 노드가 방금 생성되었으며 아직 트리에 추가되지 않았습니다.
  • 노드가 트리에서 제거되었습니다.
  • 이것은 항상 널 부모 노드를 가진 루트Document노드입니다.

Remove메서드를 호출하여 부모 노드를 제거할 수 있습니다.다음 코드 예제에서는 부모 노드에 액세스하는 방법을 보여 줍니다:

자식 노드

CompositeNode의 자식 노드에 액세스하는 가장 효율적인 방법은 각각 첫 번째 및 마지막 자식 노드를 반환하는FirstChildLastChild속성을 통해입니다. 자식 노드가 없으면 이러한 속성은null을 반환합니다.

CompositeNode

노드에 자식이 없는 경우ChildNodes속성은 빈 컬렉션을 반환합니다. HasChildNodes속성을 사용하여CompositeNode에 자식 노드가 있는지 여부를 확인할 수 있습니다.

다음 코드 예제에서는ChildNodes컬렉션에서 제공하는 열거자를 사용하여CompositeNode의 직접 자식 노드를 열거하는 방법을 보여 줍니다:

다음 코드 예제에서는 인덱싱된 액세스를 사용하여CompositeNode의 직접 자식 노드를 열거하는 방법을 보여 줍니다:

형제 노드

PreviousSiblingNextSibling속성을 각각 사용하여 특정 노드 바로 앞이나 뒤에 오는 노드를 얻을 수 있습니다. 노드가 부모의 마지막 자식이라면NextSibling속성은null입니다. 반대로,노드가 부모의 첫 번째 자식이라면,PreviousSibling속성은null입니다.

다음 코드 예제에서는 복합 노드의 모든 직접 및 간접 자식 노드를 효율적으로 방문하는 방법을 보여 줍니다:

자식 및 부모 노드에 대한 형식화된 액세스

지금까지Node또는CompositeNode의 기본 유형 중 하나를 반환하는 속성에 대해 논의했습니다. 그러나 때때로Run또는Paragraph와 같은 특정 노드 클래스에 값을 캐스팅해야 할 수도 있는 상황이 있습니다. 즉,합성 인Aspose.WordsDOM로 작업 할 때 캐스팅을 완전히 벗어날 수 없습니다.

캐스팅의 필요성을 줄이기 위해 대부분의Aspose.Words클래스는 강력한 형식의 액세스를 제공하는 속성과 컬렉션을 제공합니다. 입력된 접근에는 세 가지 기본 패턴이 있습니다.:

형식화된 속성은Node.ParentNodeCompositeNode.FirstChild에서 상속된 일반 속성보다 더 쉽게 액세스할 수 있는 유용한 바로 가기에 불과합니다.

다음 코드 예제에서는 형식화된 속성을 사용하여 문서 트리의 노드에 액세스하는 방법을 보여 줍니다: