CompositeNode

CompositeNode class

Базовый класс для узлов, которые могут содержать другие узлы.

public abstract class CompositeNode : Node, IEnumerable<Node>, IXPathNavigable

Характеристики

Имя Описание
ChildNodes { get; } Получает все непосредственные дочерние узлы этого узла.
Count { get; } Получает количество непосредственных дочерних элементов этого узла.
CustomNodeId { get; set; } Указывает идентификатор пользовательского узла.
virtual Document { get; } Получает документ, которому принадлежит этот узел.
FirstChild { get; } Получает первого потомка узла.
HasChildNodes { get; } Возвращает true, если у этого узла есть дочерние узлы.
override IsComposite { get; } Возвращает true, так как этот узел может иметь дочерние узлы.
LastChild { get; } Получает последний дочерний элемент узла.
NextSibling { get; } Получает узел, следующий сразу за этим узлом.
abstract NodeType { get; } Получает тип этого узла.
ParentNode { get; } Получает непосредственного родителя этого узла.
PreviousSibling { get; } Получает узел, непосредственно предшествующий этому узлу.
Range { get; } Возвращает Диапазон объект, представляющий часть документа, содержащегося в этом узле.

Методы

Имя Описание
abstract Accept(DocumentVisitor) Принимает посетителя.
AppendChild(Node) Добавляет указанный узел в конец списка дочерних узлов для этого узла.
Clone(bool) Создает дубликат узла.
CreateNavigator() Зарезервировано для системного использования. IXPathNavigable.
GetAncestor(NodeType) Получает первого предка указанногоNodeType .
GetAncestor(Type) Получает первого предка указанного типа объекта.
GetChild(NodeType, int, bool) Возвращает N-й дочерний узел, соответствующий указанному типу.
GetChildNodes(NodeType, bool) Возвращает динамическую коллекцию дочерних узлов, соответствующих указанному типу.
GetEnumerator() Обеспечивает поддержку для каждой итерации стиля над дочерними узлами этого узла.
override GetText() Получает текст этого узла и всех его дочерних элементов.
IndexOf(Node) Возвращает индекс указанного дочернего узла в массиве дочерних узлов.
InsertAfter(Node, Node) Вставляет указанный узел сразу после указанного ссылочного узла.
InsertBefore(Node, Node) Вставляет указанный узел непосредственно перед указанным ссылочным узлом.
NextPreOrder(Node) Получает следующий узел в соответствии с алгоритмом обхода дерева предварительного порядка.
PrependChild(Node) Добавляет указанный узел в начало списка дочерних узлов для этого узла.
PreviousPreOrder(Node) Получает предыдущий узел в соответствии с алгоритмом обхода дерева предварительного порядка.
Remove() Удаляет себя из родителя.
RemoveAllChildren() Удаляет все дочерние узлы текущего узла.
RemoveChild(Node) Удаляет указанный дочерний узел.
RemoveSmartTags() Удаляет всеSmartTag узлы-потомки текущего узла.
SelectNodes(string) Выбирает список узлов, соответствующих выражению XPath.
SelectSingleNode(string) Выбирает первый узел, соответствующий выражению XPath.
ToString(SaveFormat) Экспортирует содержимое узла в строку в указанном формате.
ToString(SaveOptions) Экспортирует содержимое узла в строку, используя указанные параметры сохранения.

Примечания

Документ представлен в виде дерева узлов, похожего на DOM или XmlDocument.

Дополнительные сведения см. в шаблоне проектирования Composite.

CompositeNodeучебный класс:

  • Предоставляет доступ к дочерним узлам.
  • Реализует составные операции, такие как вставка и удаление дочерних элементов.
  • Предоставляет методы для навигации XPath.

Примеры

Показывает, как пройти через коллекцию дочерних узлов составного узла.

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.ChildNodes;

Assert.AreEqual(3, paragraph.ChildNodes.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}");
    }

Смотрите также