GetChildNodes
CompositeNode.GetChildNodes method
Возвращает живую коллекцию дочерних узлов, соответствующих указанному типу.
public NodeCollection GetChildNodes(NodeType nodeType, bool isDeep)
Параметр | Тип | Описание |
---|---|---|
nodeType | NodeType | Указывает тип узлов для выбора. |
isDeep | Boolean | истинный рекурсивно выбирать из всех дочерних узлов; ЛОЖЬ выбирать только среди ближайших детей. |
Возвращаемое значение
Живая коллекция дочерних узлов указанного типа.
Примечания
Коллекция узлов, возвращаемая этим методом, всегда активна.
Живая коллекция всегда синхронизируется с документом. Например, если вы выбрали все разделы в документе и выполнили перечисление в коллекции , удалив разделы, раздел будет удален из коллекции немедленно при его удалении из документа.
Примеры
Показывает, как распечатать все комментарии к документу и ответы на них.
Document doc = new Document(MyDir + "Comments.docx");
NodeCollection comments = doc.GetChildNodes(NodeType.Comment, true);
// Если комментарий не имеет предка, это комментарий «верхнего уровня», а не комментарий типа ответа.
// Распечатываем все комментарии верхнего уровня вместе со всеми ответами, которые они могут иметь.
foreach (Comment comment in comments.OfType<Comment>().Where(c => c.Ancestor == null))
{
Console.WriteLine("Top-level comment:");
Console.WriteLine($"\t\"{comment.GetText().Trim()}\", by {comment.Author}");
Console.WriteLine($"Has {comment.Replies.Count} replies");
foreach (Comment commentReply in comment.Replies)
{
Console.WriteLine($"\t\"{commentReply.GetText().Trim()}\", by {commentReply.Author}");
}
Console.WriteLine();
}
Показывает, как извлечь изображения из документа и сохранить их в локальной файловой системе как отдельные файлы.
Document doc = new Document(MyDir + "Images.docx");
// Получаем коллекцию фигур из документа,
// и сохраняем данные изображения каждой формы с изображением в виде файла в локальной файловой системе.
NodeCollection shapes = doc.GetChildNodes(NodeType.Shape, true);
Assert.AreEqual(9, shapes.Count(s => ((Shape)s).HasImage));
int imageIndex = 0;
foreach (Shape shape in shapes.OfType<Shape>())
{
if (shape.HasImage)
{
// Данные изображений фигур могут содержать изображения многих возможных форматов изображений.
// Мы можем автоматически определить расширение файла для каждого изображения в зависимости от его формата.
string imageFileName =
$"File.ExtractImages.{imageIndex}{FileFormatUtil.ImageTypeToExtension(shape.ImageData.ImageType)}";
shape.ImageData.Save(ArtifactsDir + imageFileName);
imageIndex++;
}
}
Показывает, как перемещаться по коллекции дочерних узлов составного узла.
Document doc = new Document();
// Добавьте два прогона и одну фигуру в качестве дочерних узлов в первый абзац этого документа.
Paragraph paragraph = (Paragraph)doc.GetChild(NodeType.Paragraph, 0, true);
paragraph.AppendChild(new Run(doc, "Hello world! "));
Shape shape = new Shape(doc, ShapeType.Rectangle);
shape.Width = 200;
shape.Height = 200;
// Обратите внимание, что CustomNodeId не сохраняется в выходном файле и существует только во время существования узла.
shape.CustomNodeId = 100;
shape.WrapType = WrapType.Inline;
paragraph.AppendChild(shape);
paragraph.AppendChild(new Run(doc, "Hello again!"));
// Перебираем коллекцию непосредственных дочерних элементов абзаца,
// и распечатываем любые фрагменты или фигуры, которые мы находим внутри.
NodeCollection children = paragraph.GetChildNodes(NodeType.Any, false);
Assert.AreEqual(3, paragraph.GetChildNodes(NodeType.Any, false).Count);
foreach (Node child in children)
switch (child.NodeType)
{
case NodeType.Run:
Console.WriteLine("Run contents:");
Console.WriteLine($"\t\"{child.GetText().Trim()}\"");
break;
case NodeType.Shape:
Shape childShape = (Shape)child;
Console.WriteLine("Shape:");
Console.WriteLine($"\t{childShape.ShapeType}, {childShape.Width}x{childShape.Height}");
break;
}
Показывает, как добавлять, обновлять и удалять дочерние узлы в коллекции дочерних узлов CompositeNode.
Document doc = new Document();
// Пустой документ по умолчанию имеет один абзац.
Assert.AreEqual(1, doc.FirstSection.Body.Paragraphs.Count);
// Составные узлы, такие как наш абзац, могут содержать в качестве дочерних элементов другие составные и строчные узлы.
Paragraph paragraph = doc.FirstSection.Body.FirstParagraph;
Run paragraphText = new Run(doc, "Initial text. ");
paragraph.AppendChild(paragraphText);
// Создаем еще три узла запуска.
Run run1 = new Run(doc, "Run 1. ");
Run run2 = new Run(doc, "Run 2. ");
Run run3 = new Run(doc, "Run 3. ");
// Тело документа не будет отображать эти прогоны, пока мы не вставим их в составной узел
// это само по себе является частью дерева узлов документа, как мы делали при первом запуске.
// Мы можем определить, где находится текстовое содержимое узлов, которые мы вставляем
// появляется в документе при указании места вставки относительно другого узла в абзаце.
Assert.AreEqual("Initial text.", paragraph.GetText().Trim());
// Вставляем второй проход в абзац перед первым.
paragraph.InsertBefore(run2, paragraphText);
Assert.AreEqual("Run 2. Initial text.", paragraph.GetText().Trim());
// Вставляем третий запуск после первого.
paragraph.InsertAfter(run3, paragraphText);
Assert.AreEqual("Run 2. Initial text. Run 3.", paragraph.GetText().Trim());
// Вставляем первый прогон в начало коллекции дочерних узлов абзаца.
paragraph.PrependChild(run1);
Assert.AreEqual("Run 1. Run 2. Initial text. Run 3.", paragraph.GetText().Trim());
Assert.AreEqual(4, paragraph.GetChildNodes(NodeType.Any, true).Count);
// Мы можем изменить содержимое прогона, отредактировав и удалив существующие дочерние узлы.
((Run)paragraph.GetChildNodes(NodeType.Run, true)[1]).Text = "Updated run 2. ";
paragraph.GetChildNodes(NodeType.Run, true).Remove(paragraphText);
Assert.AreEqual("Run 1. Updated run 2. Run 3.", paragraph.GetText().Trim());
Assert.AreEqual(3, paragraph.GetChildNodes(NodeType.Any, true).Count);
Смотрите также
- class NodeCollection
- enum NodeType
- class CompositeNode
- пространство имен Aspose.Words
- сборка Aspose.Words