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