Главная страница
Навигация по странице:

  • XmlDocumentFragment

  • Тип узла Изменяемые данные

  • МУ_ЛР_ЛиПОАС. Методические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем


    Скачать 2.76 Mb.
    НазваниеМетодические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем
    Дата12.04.2023
    Размер2.76 Mb.
    Формат файлаdoc
    Имя файлаМУ_ЛР_ЛиПОАС.doc
    ТипМетодические указания
    #1057976
    страница21 из 32
    1   ...   17   18   19   20   21   22   23   24   ...   32

    2.34. Копирование фрагментов документа


    Можно создать узел XmlDocumentFragment, а затем добавлять к нему нижележащие узлы. При вставке узла XmlDocumentFragment с помощью метода InsertNode узел XmlDocumentFragment не копируется, но его дочерние узлы вставляются в модель XML DOM.

    2.35. Удаление узлов, содержимого и значений из XML-документа


    Как только в памяти создана модель XML DOM, можно удалить узлы дерева или удалить содержимое и значения из узлов определенного типа..

    Для удаления узла из модели DOM XML-документа используется метод RemoveChild, с помощью которого удаляется конкретный узел. При удалении узла метод удаляет поддерево, принадлежащее удаляемому узлу т.е. если это не конечный узел.

    Для удаления нескольких узлов из DOM используется метод RemoveAll, удаляющий все дочерние узлы и атрибуты (если применимо) текущего узла.

    При работе с классом XmlNamedNodeMap можно удалить узел с помощью метода RemoveNamedItem.

    Существует много способов удаления атрибутов. Один из них заключается в их удалении из коллекции атрибутов. Для этого выполняются следующие шаги.

    1. Возвратите коллекцию атрибутов из элемента с помощью кода XmlAttributeCollection attrs = elem.Attributes;.

    2. Удалите атрибут из коллекции атрибутов, используя один из трех методов.

      • Метод Remove удаляет указанный атрибут.

      • Метод RemoveAll удаляет все атрибуты из коллекции, оставляя элемент без атрибутов.

      • Метод RemoveAt удаляет атрибут из коллекции, используя его индексный номер.

    Следующие методы удаляют атрибуты из узла элемента.

    • Метод RemoveAllAttributes удаляет коллекцию атрибутов.

    • Метод RemoveAttribute удаляет из коллекции один атрибут по заданному имени.

    • Метод RemoveAttributeAt удаляет из коллекции один атрибут по индексному номеру.

    Чтобы удалить атрибут, можно также вернуть элемент, вернуть атрибут из коллекции атрибутов и напрямую удалить узел атрибута. Чтобы вернуть атрибут из коллекции атрибутов, можно использовать имя XmlAttribute attr = attrs["attr_name"];, индекс XmlAttribute attr = attrs[0]; или полное имя, включая пространство имен XmlAttribute attr = attrs["attr_localName", "attr_namespace"].

    Независимо от способа удаления атрибута, существуют специальные ограничения на удаление атрибутов, определенные в определении DTD как атрибуты по умолчанию. Атрибуты по умолчанию нельзя удалять, если не удален элемент, которому они принадлежат. Атрибуты по умолчанию всегда присутствуют в элементах, для которых декларированы атрибуты по умолчанию. Удаление атрибута по умолчанию из коллекции XmlAttributeCollection или XmlElement приводит к вставке замещающего атрибута в коллекцию XmlAttributeCollection элемента и инициализации декларированного значения по умолчанию. Если существует элемент, определенный как , то существует элемент book с тремя атрибутами, объявленными по умолчанию. Реализация модели XML DOM гарантирует, что, пока существует элемент book, он имеет три атрибута по умолчанию: att1, att2 и att3.

    Если метод XmlAttribute вызывается с атрибутом RemoveAll, он присваивает атрибуту значение String.Empty, поскольку атрибут не может существовать без значения.

    Для типов узлов, наследующих от XmlCharacterData, являющихся типами узлов XmlComment,XmlText,XmlCDataSection,XmlWhitespace и XmlSignificantWhitespace, можно удалить символы с помощью метода DeleteData, который удаляет диапазон символов из узла. Если требуется полностью удалить содержимое, нужно удалить узел, содержащий содержимое. Если требуется сохранить узел, содержимое которого неверно, нужно изменить содержимое.

    2.36. Изменение узлов, содержимого и значений в XML-документе


    Существует множество способов изменения узлов и содержимого в документе. Можно выполнить следующие действия.

    • изменять значение узлов с помощью свойства Value;

    • изменять набор узлов в целом, заменяя узлы новыми. Это делается с помощью свойства InnerXml;

    • заменять существующие узлы новыми с помощью метода RemoveChild;

    • добавлять в узлы дополнительные символы, наследующие от класса XmlCharacterData, используя методы AppendData, InsertData или ReplaceData;

    • изменять содержимое путем удаления диапазона символов с помощью метода DeleteData для типов узлов, наследующих от XmlCharacterData.

    Изменить значение узла можно с помощью простого приема node.Value = "new value";. В следующей таблице перечислены типы узлов, в которых работает эта строка кода, и указано, какие данные изменяются для этого типа узла.

    Таблица 2.17




    Тип узла

    Изменяемые данные

    Атрибут

    Значение атрибута.

    CDATASection.

    Содержимое CDATASection.

    Добавление примечаний

    Содержимое комментария.

    ProcessingInstruction;

    Содержимое, за исключением цели.

    Text

    Содержимое текстового узла.

    XmlDeclaration

    Содержимое декларации, за исключением разметки .

    Whitespace

    Значение символа пробела. В качестве значения можно задать один из четырех различаемых в XML пробельных символов: пробел, табуляция, CR или LF.

    SignificantWhitespace

    Значение значащих пробелов. В качестве значения можно задать один из четырех различаемых в XML пробельных символов: пробел, табуляция, CR или LF.

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

    Свойство InnerXml изменяет разметку дочерних узлов текущего узла. Задание этого свойства замещает дочерние узлы значением заданной строки, содержимое которой прошло синтаксический анализ. Синтаксический анализ выполняется в контексте текущего пространства имен. Кроме того, свойство InnerXml удаляет избыточные декларации пространств имен. В результате после многочисленных операций вырезания и вставки размер документа не будет увеличиваться за счет избыточных деклараций пространств имен. Пример кода, демонстрирующий влияние пространств имен на работу InnerXml, см. в свойстве InnerXml.

    Использование методов ReplaceData и RemoveChild возвращает замещенный или удаленный узел. Затем этот узел можно повторно вставить в другом месте модели XML DOM. Метод ReplaceData выполняет двойную проверку узла, вставляемого в документ. Первая проверка обеспечивает то, что узел становится дочерним для узла, который может иметь дочерние узлы такого типа. Вторая проверка обеспечивает то, что вставляемый узел не является предком узла, для которого он становится дочерним. Несоблюдение любого из этих условий вызывает исключение InvalidOperationException.

    Допустимо добавлять дочерний узел, доступный только для чтения, в узел, поддерживающий изменение, или удалять из него. Однако при попытке изменить сам узел, доступный только для чтения, вызывается исключение InvalidOperationException. Примером может служить изменение потомков узла XmlEntityReference. Потомки доступны только для чтения, и их нельзя изменить. Любая попытка изменить вызывает исключение InvalidOperationException.
    1   ...   17   18   19   20   21   22   23   24   ...   32


    написать администратору сайта