Книга: Технология XSLT
Использование ключей в нескольких документах
Разделы на этой странице:
Использование ключей в нескольких документах
Ключи, определенные в преобразовании, могут использоваться для выбора узлов в различных обрабатываемых документах. Функция key
возвращает узлы, которые принадлежат текущему документу, то есть документу, содержащему текущий узел. Значит, для того, чтобы выбирать узлы из внешнего документа, необходимо сделать текущим узлом один из узлов этого внешнего документа. Контекстный документ может быть легко изменен элементом xsl:for-each
, например, для того, чтобы текущим документом стал документ a.xml
, достаточно написать
<xsl:for-each select="document('а.xml')">
<!-- Теперь текущим документом стал документ а.xml -->
</xsl:for-each>
Пример
Предположим, что нам нужно выбрать объекты, принадлежащие источнику a
, причем принадлежность объектов определена в двух внешних документах, a.xml
и b.xml
.
Листинг 8.22. Входящий документ
<source name="a"/>
Листинг 8.23. Документ a.xml
<items>
<item source="a" name="A"/>
<item source="b" name="B"/>
<item source="a" name="C"/>
<item source="c" name="D"/>
</items>
Листинг 8.24. Документ b.xml
<items>
<item source="b" name="E"/>
<item source="b" name="F"/>
<item source="c" name="G"/>
<item source="a" name="H"/>
</items>
Листинг 8.25. Преобразование
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="src" match="item" use="@source"/>
<xsl:template match="source">
<xsl:variable name="name" select="@name"/>
<xsl:copy>
<xsl:for-each select="document('a.xml')|document('b.xml')">
<xsl:copy-of select="key('src', $name)"/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Листинг 8.26. Выходящий документ
<source>
<item source="a" name="A"/>
<item source="a" name="C"/>
<item source="a" name="H"/>
</source>
- Восстановление с использованием инструмента gbak
- Типы страниц и их использование
- Использование констант
- Использование переменной окружения ISC_PATH
- Использование сервера Yaffil внутри процесса
- Одновременный запуск нескольких копий сервера (multi-instancing)
- Использование CAST() с типами дата
- Использование типов содержимого и столбцов
- Вызов хранимых процедур InterBase с использованием стандартного синтаксиса ODBC
- Использование кнопки Автосумма
- 24.7. Использование программы-твикера
- Использование отдельных процессоров XSLT