SmartTag

SmartTag class

Этот элемент указывает наличие смарт-тега вокруг одной или нескольких встроенных структур (прогонов, изображений, полей и т. д.) в абзаце.

public class SmartTag : CompositeNode

Конструкторы

Имя Описание
SmartTag(DocumentBase) Инициализирует новый экземплярSmartTag класс.

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

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

Методы

Имя Описание
override 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) Экспортирует содержимое узла в строку, используя указанные параметры сохранения.

Примечания

Смарт-теги — это своего рода пользовательская XML-разметка. Смарт-теги обеспечивают возможность встраивания определяемой пользователем семантики в документ посредством предоставления базового пространства имен/имени для запуска или набора запусков в документе.

SmartTag может быть ребенкомParagraph или другойSmartTag узел.

Полный список дочерних узлов, которые могут встречаться внутри смарт-тега, состоит из BookmarkStart ,BookmarkEnd , FieldStart ,FieldSeparator ,FieldEnd ,FormField , Comment ,Footnote , Run ,SpecialChar , Shape ,GroupShape , CommentRangeStart , CommentRangeEnd , SmartTag.

Примеры

Показывает, как создавать смарт-теги.

public void Create()
{
    Document doc = new Document();

    // Смарт-тег появляется в документе, в котором Microsoft Word распознает часть своего текста как некую форму данных,
    // таких как имя, дата или адрес, и преобразует их в гиперссылку, которая подчеркнута фиолетовой пунктирной линией.
    SmartTag smartTag = new SmartTag(doc);

    // Смарт-теги — это составные узлы, содержащие полностью распознанный текст.
    // Добавляем содержимое в этот смарт-тег вручную.
    smartTag.AppendChild(new Run(doc, "May 29, 2019"));

    // Microsoft Word может распознать вышеуказанное содержимое как дату.
    // Смарт-теги используют свойство «Элемент», чтобы отразить тип содержащихся в них данных.
    smartTag.Element = "date";

    // Некоторые типы смарт-тегов преобразуют свое содержимое в пользовательские свойства XML.
    smartTag.Properties.Add(new CustomXmlProperty("Day", string.Empty, "29"));
    smartTag.Properties.Add(new CustomXmlProperty("Month", string.Empty, "5"));
    smartTag.Properties.Add(new CustomXmlProperty("Year", string.Empty, "2019"));

    // Установите для URI смарт-тега значение по умолчанию.
    smartTag.Uri = "urn:schemas-microsoft-com:office:smarttags";

    doc.FirstSection.Body.FirstParagraph.AppendChild(smartTag);
    doc.FirstSection.Body.FirstParagraph.AppendChild(new Run(doc, " is a date. "));

    // Создайте еще один смарт-тег для бегущей строки.
    smartTag = new SmartTag(doc);
    smartTag.Element = "stockticker";
    smartTag.Uri = "urn:schemas-microsoft-com:office:smarttags";

    smartTag.AppendChild(new Run(doc, "MSFT"));

    doc.FirstSection.Body.FirstParagraph.AppendChild(smartTag);
    doc.FirstSection.Body.FirstParagraph.AppendChild(new Run(doc, " is a stock ticker."));

    // Печатаем все смарт-теги в нашем документе с помощью посетителя документа.
    doc.Accept(new SmartTagPrinter());

    // Старые версии Microsoft Word поддерживают смарт-теги.
    doc.Save(ArtifactsDir + "SmartTag.Create.doc");

    // Используйте метод «RemoveSmartTags», чтобы удалить все смарт-теги из документа.
    Assert.AreEqual(2, doc.GetChildNodes(NodeType.SmartTag, true).Count);

    doc.RemoveSmartTags();

    Assert.AreEqual(0, doc.GetChildNodes(NodeType.SmartTag, true).Count);
}

/// <summary>
/// Выводит посещенные смарт-теги и их содержимое.
/// </summary>
private class SmartTagPrinter : DocumentVisitor
{
    /// <summary>
    /// Вызывается, когда в документе встречается узел SmartTag.
    /// </summary>
    public override VisitorAction VisitSmartTagStart(SmartTag smartTag)
    {
        Console.WriteLine($"Smart tag type: {smartTag.Element}");
        return VisitorAction.Continue;
    }

    /// <summary>
    /// Вызывается, когда посещение узла SmartTag завершено.
    /// </summary>
    public override VisitorAction VisitSmartTagEnd(SmartTag smartTag)
    {
        Console.WriteLine($"\tContents: \"{smartTag.ToString(SaveFormat.Text)}\"");

        if (smartTag.Properties.Count == 0)
        {
            Console.WriteLine("\tContains no properties");
        }
        else
        {
            Console.Write("\tProperties: ");
            string[] properties = new string[smartTag.Properties.Count];
            int index = 0;

            foreach (CustomXmlProperty cxp in smartTag.Properties)
                properties[index++] = $"\"{cxp.Name}\" = \"{cxp.Value}\"";

            Console.WriteLine(string.Join(", ", properties));
        }

        return VisitorAction.Continue;
    }
}

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