Как выглядит документ XSL, если
Я хочу просто отразить ввод
данные
Существует более одного ответа на этот вопрос , однако все они могут быть названы «Identity Transform»:
<xsl:copy-of select="/"/>
Это самое короткое, простое, наиболее эффективное и наиболее негибкое, нерасширяемое и бесполезное преобразование идентичности.
Классическое правило идентичности , которое каждый знает (или должен знать):
_
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Это все еще очень короткое преобразование с одним шаблоном, которое является гораздо более расширяемым и полезным преобразованием идентичности, также известным как «правило идентичности». Использование и переопределение преобразования идентификаторов является наиболее фундаментальным и мощным шаблоном проектирования XSLT, позволяющим решать общие задачи копирования и замены / переименования / удаления / добавления всего за несколько строк. Возможно, 90% + всех ответов в теге xslt
используют эту форму преобразования идентификаторов.
0,3. Правило тонкой детерминации управления , которое должен знать каждый (и мало кто знает):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()[1]"/>
</xsl:copy>
<xsl:apply-templates select="following-sibling::node()[1]"/>
</xsl:template>
</xsl:stylesheet>
Это похоже на общеизвестное правило идентификации, определенное в 2. выше, но оно обеспечивает более точное управление обработкой XSLT.
Обычно с 2. <xsl:apply-templates select="@*|node()">
запускает ряд преобразований (для всех атрибутов и дочерних узлов), которые могут быть выполнены в любом порядке или даже параллельно. Существуют задачи, в которых мы не хотим, чтобы определенные типы узлов обрабатывались после некоторых других узлов, поэтому мы должны устранить утечку правила идентификации, заменив его пустыми шаблонами, соответствующими нежелательным узлам, и добавив другие шаблоны в определенном режиме. обрабатывать эти узлы "когда придет время" ...
0,3. больше подходит для задач, где мы хотим больше контроля и действительно последовательной обработки.
Некоторые задачи, которые очень трудно решить с помощью 2., легко использовать с помощью 3.