Элемент <xsl:copy>
Элемент <xsl:copy>
Элемент <xsl:copy> позволяет скопировать узел из исходного дерева в выходное. Заметьте, однако, что это поверхностное (shallow) копирование, при котором не копируются потомки и атрибуты узла. У элемента есть один атрибут:
• use-attribute-sets. Задает названия наборов атрибутов, которые нужно применить к создаваемому элементу. Принимает значение списка QName, разделенных символами-разделителями. Этот атрибут можно использовать только в том случае, когда контекстный узел является элементом. Дополнительная информация о наборах атрибутов приведена в главе 6.
Этот элемент может содержать тело шаблона, которое используется только когда копируется корневой узел или элемент. Заметьте, что при применении к корневому узлу элемент <xsl:copy> не задействован, поскольку узел выходного документа создается автоматически.
Приведенная в листинге 3.9 таблица стилей впервые появилась в главе 2; все, что она делает, — копирует все элементы из исходного документа в результирующий.
Листинг 3.9. Таблица стилей, копирующая элементы
<?xml version="1.0"?>
<xsl:stylesheet
version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Однако <xsl:copy> не копирует атрибуты — вот результат применения этой таблицы стилей к planets.xml:
<?xml version="1.0" encoding="UTF-8"?>
<PLANETS>
<PLANET>
<NAME>Mercury</NAME>
<MASS>.0553</MASS>
<DAY>58.65</DAY>
<RADIUS>1516</RADIUS>
<DENSITY>.983</DENSITY>
<DISTANCE>43.4</DISTANCE>
</PLANET>
<PLANET>
<NAME>Venus</NAME>
<MASS>.815</MASS>
<DAY>116.75</DAY>
<RADIUS>3716</RADIUS>
<DENSITY>.943</DENSITY>
<DISTANCE>66.8</DISTANCE>
</PLANET>
<PLANET>
<NAME>Earth</NAME>
<MASS>1</MASS>
<DAY>1</DAY>
<RADIUS>2107</RADIUS>
<DENSITY>1</DENSITY>
<DISTANCE>128.4</DISTANCE>
</PLANET>
</PLANETS>
Копирование атрибутов несколько сложнее, потому что нужно найти какой-либо способ применить <xsl:copy> к каждому атрибуту элемента. Это можно сделать, например, при помощи элемента <xsl:for-each>, о котором пойдет речь в главе 5.
Листинг 3.10. Копирование атрибутов
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="*">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:copy/>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
А вот результат — заметьте, что на этот раз атрибуты не затронуты:
<?xml version="1.0" encoding-"UTF=8"?>
<PLANETS>
<PLANET>
<NAME>Mercury</NAME>
<MASS UNITS="(Earth = 1)">.0553</MASS>
<DAY UNITS="days">58.65</DAY>
<RADIUS UNITS="miles">1516</RADIUS>
<DENSITY UNITS="(Earth = 1)">.983</DENSITY>
<DISTANCE UNITS="million miles">43.4</DISTANCE>
</PLANET>
<PLANET>
<NAME>Venus</NAME>
<MASS UNITS="(Earth = 1)">.815</MASS>
<DAY UNITS="days">116.75</DAY>
<RADIUS UNITS="miles">3716</RADIUS>
<DENSITY UNITS="(Earth = 1)">.943</DENSITY>
<DISTANCE UNITS="million miles">66.8</DISTANCE>
</PLANET>
<PLANET>
<NAME>Earth</NAME>
<MASS UNITS="(Earth = 1)">1</MASS>
<DAY UNITS="days">1</DAY>
<RADIUS UNITS="miles">2107</RADIUS>
<DENSITY UNITS="(Earth = 1)">1</DENSITY>
<DISTANCE UNITS="million miles">128.4</DISTANCE>
</PLANET>
</PLANETS>
Но есть более простой путь проверить, что копируются все дочерние узлы, атрибуты и другие потомки узлов: вместо элемента <xsl:copy> можно применить <xsl:copy-of>.
ГЛУБОКОЕ КОПИРОВАНИЕ
Пример использования <xsl:copy> для осуществления глубокого копирования документа будет приведен в главе 4, в которой описывается функция узла и объясняется, как рекурсивно вызывать один и тот же шаблон.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Элемент <xsl:copy-of>
Элемент <xsl:copy-of> Элемент <xsl:copy-of> позволяет осуществлять глубокое копирование узлов, при котором копируется не только узел, но и все его атрибуты и потомки. У этого элемента единственный атрибут:• select (обязательный). Узел или набор копируемых узлов. Этот элемент пуст
Элемент <example>
Элемент <example> Внутри элемента <example> приводится текст из одной или нескольких строк, в котором можно описать примеры запуска сценария. Если сценарий был запущен с ключом /? в командной строке или в сценарии встретился вызов метода ShowUsage объекта WshArguments, то этот текст
Метод Copy
Метод Copy Обязательный параметр destination определяет каталог, в который будет производиться копирование; групповые символы в имени каталога недопустимы.Параметр overwrite является логической переменной, определяющей, следует ли заменять уже существующий каталог с именем
Метод Copy
Метод Copy Обязательный параметр destination определяет файл, в который будет производиться копирование; групповые символы в имени файла недопустимы.Параметр overwrite является логической переменной, определяющей, следует ли заменять уже существующий файл с именем destination (overwrite=true)
Roxio Easy DVD Copy
Roxio Easy DVD Copy Программа Roxio Easy DVD Copy версии 7.0 позволяет создавать копии кинофильмов, фотографий, музыки и дисков с данными на DVD (односторонних и двусторонних) и CD. Приложение поддерживает одновременное использование нескольких приводов компакт-дисков и позволяет
11. Меньше copy — меньше и вздору, или Избыточность текста и сжатие файла
11. Меньше copy — меньше и вздору, или Избыточность текста и сжатие файла Все знают, что большинству людей свойственно излишнее многословие. Гораздо менее широко известно, что даже самые лаконичные высказывания можно было бы значительно сократить. Вообще, естественные
Drive Copy
Drive Copy Эта программа выполняет те же функции, что и вышеописанный DeployCenter, но только в рамках одной машины. «Вы собираетесь модернизировать компьютер? Купите новый диск, установите его вместе со старым… И запустите DriveCopy!» Разумеется, речь идет не о простой замене
Копировать (Copy)
Копировать (Copy) template ‹class InputIterator, class OutputIterator›OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result);copy копирует элементы. Для каждого неотрицательного целого числа n ‹ (last - first) выполняется присваивание *(result + n) = *(first + n). Точно делается last - first присваиваний. Результат copy не
Пример A-6. copy-cd: Копирование компакт-дисков с данными
Пример A-6. copy-cd: Копирование компакт-дисков с данными #!/bin/bash# copy-cd.sh: copying a data CDCDROM=/dev/cdrom # устройство CD ROMOF=/home/bozo/projects/cdimage.iso # промежуточный файл# /xxxx/xxxxxxx/ измените для своей системы.BLOCKSIZE=2048SPEED=2 # Можно задать более высокую
Exact Audio Copy (EAC)
Exact Audio Copy (EAC) (http://www.exactaudiocopv.de)Пользователь-новичок, привыкший «перегонять» диски в MP3 с помощью удобного и красивого «граббера» (например, того же Windows Media Player), от этой программы скорее всего поначалу отшатнется: ни тебе удобностей, ни тебе красивостей… Зато есть громадное
Exact Audio Copy (EAC)
Exact Audio Copy (EAC) Сайт: http://www.exactaudiocopv.deРазмер: 2 МбСтатус: FreewareПользователь-новичок, привыкший «перегонять» диски в MP3 с помощью удобного и красивого Audio-grabber, Windows Media Player или CDex, от этой программы скорее всего поначалу отшатнется: ни тебе удобностей, ни тебе красивостей… Зато
Элемент xsl:copy
Элемент xsl:copy Ниже представлена синтаксическая конструкция этого элемента:<xsl:copy use-attribute-sets = "наборы атрибутов"> <!-- Содержимое: шаблон --></xsl:copy>Элемент xsl:copy создает копию текущего узла вне зависимости от его типа. Вместе с текущим узлом в выходящее дерево
Фиксированная семантика компонентов copy, clone и equality
Фиксированная семантика компонентов copy, clone и equality Чаще всего замороженные (frozen) компоненты применяются в операциях общего назначения, подобных тем, что входили в состав класса GENERAL. Так, есть две версии базовой процедуры копирования:copy, frozen standard_copy (other: ...) is-- скопировать
Клонирование по сетке ("Copy to Grid")
Клонирование по сетке ("Copy to Grid") Клонирование по сетке — самый простой из эффектов, который мы можем применить к выделенному фрагменту изображения. Данный эффект даже не анимирован.Чтобы применить этот эффект к выделенному фрагменту изображения, нужно выбрать пункт Copy to