Navigation

Navigation

Aspose.Words .NET용 FOSS에는 작은 Nodes.Navigation 문서 노드 트리 내에서 반복 및 위치 지정용 네임스페이스: NodeEnumerator, 자식 노드에 대한 for-each 스타일 반복을 담당하는 열거형 타입이며, DocumentPositionMovement, 트래버설 중 한 노드의 위치가 다른 노드와 어떻게 관련되는지를 설명하는 열거형입니다. 이는 트리 조작 API(삽입, 제거 및 노드 재구성)와는 구별되며, 해당 API는 Nodes 페이지 — 이 페이지는 이미 존재하는 트리 내에서 이동하고 위치를 비교하는 방법을 다룹니다.


자식 노드 순회

모든 CompositeNode (컨테이너 노드인 Document, Section, Body, 및 Paragraph와 같은 노드의 기본 클래스) 는 GetEnumerator()를 통해 즉시 자식에 대한 for-each 스타일 반복을 지원하며, 이는 — 문서에 따르면 — 노드의 자식 노드에 대한 for-each 스타일 반복을 지원합니다. 반환된 열거자는 IEnumerator<Node>을 구현합니다; 이 API 표면에서 그 역할은 NodeEnumerator이 맡으며, NodeEnumerator은 또한 IDocumentPositionListener을 구현하여 기본 트리를 열거하는 동안 위치 변화를 추적할 수 있습니다. NodeEnumerator는 표준 Dispose() 및 Reset() 멤버를 IEnumerator<Node> 계약과 함께 노출합니다.


문서 위치 이동

DocumentPositionMovement은 여섯 개 멤버 — None, Inside, StartEnd, Sibling, Above, Below — 를 가진 열거형으로, 트리를 탐색하면서 문서 내 한 위치가 다른 위치와 어떻게 관련되는지를 나타냅니다: 변경되지 않음, 노드 내부로 이동, 시작/끝 경계로 이동, 형제로 이동, 혹은 기준 위치 위나 아래로 이동하는 경우 등을 포함합니다. 이는 API 표면의 동일한 Nodes.Navigation 영역에서 NodeEnumerator와 함께 정의되어, 열거 중 위치 변화를 추적하는 역할을 반영합니다.


팁 및 모범 사례

  • 표준 C# foreach를 모든 CompositeNode 위에 사용하거나 (GetEnumerator()를 직접 호출하여) 노드의 즉시 자식을 순회하십시오 — 열거자는 IEnumerator<Node> 계약을 대신 처리합니다.
  • NodeEnumerator가 IDocumentPositionListener도 구현하므로, 트리 구조 편집 중에 열거자를 캐시하지 마십시오; 반복 중인 노드 컬렉션이 변경된 경우 GetEnumerator()를 통해 다시 얻으세요.
  • 깊은 트리 순회(즉시 자식만이 아니라)를 위해서는 Node.NextPreOrder(rootNode) / PreviousPreOrder(rootNode)을 사용하거나, isDeep을 true로 설정한 GetChildNodes(nodeType, isDeep)를 사용하고, 열거자를 수동으로 중첩하지 마세요.

일반적인 문제

문제원인수정
노드의 자식을 열거하면서 수정하면 노드가 예외를 발생시키거나 건너뛰게 됩니다열거 중에 트리 구조가 변경되었습니다먼저 배열에 노드를 수집합니다(예: NodeCollection.ToArray() 사용). 그런 다음 트리를 수정하면서 배열을 순회합니다
이동된 위치가 원래 위치와 어떻게 관련되는지 확실하지 않음DocumentPositionMovement 값이 검사되지 않았습니다특정 관계를 가정하기보다 보고된 DocumentPositionMovement (Inside, StartEnd, Sibling, Above, Below, 또는 None)을 확인하십시오

FAQ

직접 NodeEnumerator를 사용해야 합니까?

보통은 그렇지 않습니다 — CompositeNode 위의 표준 C# foreach는 GetEnumerator()를 통해 암묵적으로 사용됩니다. Dispose()/Reset()에 대한 명시적 제어가 필요할 때만 직접 사용하십시오.

DocumentPositionMovement는 무엇을 설명합니까?

탐색 중 문서 트리에서 두 위치 사이의 관계 — None, Inside, StartEnd, Sibling, Above, 또는 Below.

이것은 Nodes 페이지에 있는 트리 조작 API와 어떻게 다릅니까?

그 Nodes 이 페이지는 노드 삽입, 제거, 복제 및 재구성을 다룹니다. 이 페이지는 이미 존재하는 트리에서 읽기 전용 순회와 위치 지정에 대해 다룹니다.


API Reference 요약

클래스 / 열거형설명
NodeEnumeratorIEnumerator<Node> / IDocumentPositionListener 구현은 for-each 반복 뒤에 있습니다; Dispose(), Reset()
DocumentPositionMovement탐색 중 상대 위치를 설명하는 6멤버 열거형 (None, Inside, StartEnd, Sibling, Above, Below)
CompositeNode.GetEnumerator()노드의 즉시 자식에 대한 열거자를 반환합니다

참조

 한국어