Подтвердить что ты не робот

XSL xsl: template match = "/"

Я просто изучаю XML и как использовать XSL файлы. В XSL файле я нашел следующий термин:

xsl:template match="/"

Что это значит? И что я мог использовать вместо /? Могу ли я написать table или любой другой тег HTML вместо /?

4b9b3361

Ответ 1

Значение атрибута match инструкции <xsl:template> должно быть шаблоном соответствия.

Шаблоны соответствия образуют подмножество множества всех возможных выражений XPath. Первое естественное ограничение заключается в том, что шаблон сопоставления должен выбирать набор узлов. Есть и другие ограничения. В частности, обратные оси не допускаются на этапах определения местоположения (но могут быть указаны в предикатах). Кроме того, в XSLT 1.0 не допускаются ссылки на переменные или параметры, но их использование разрешено в XSLT 2.x.

/ в XPath обозначает корневой узел или узел документа. В XPath 2.0 (и, следовательно, XSLT 2.x) это также можно записать как document-node().

Шаблон совпадения может содержать аббревиатуру //.

Примеры шаблонов совпадений:

<xsl:template match="table">

может применяться к любому элементу с именем table.

<xsl:template match="x/y">

может применяться к любому элементу с именем y чьим родителем является элемент с именем x.

<xsl:template match="*">

может применяться к любому элементу.

<xsl:template match="/*">

может применяться только к верхнему элементу XML-документа.

<xsl:template match="@*">

может применяться к любому атрибуту.

<xsl:template match="text()">

может применяться к любому текстовому узлу.

<xsl:template match="comment()">

может применяться к любому узлу комментария.

<xsl:template match="processing-instruction()">

может применяться к любому узлу инструкции обработки.

<xsl:template match="node()">

может применяться к любому узлу: элементу, тексту, комментарию или инструкции по обработке.

Ответ 2

Стоит отметить, поскольку это путает для людей, новичков в XML, что корневой (или документ node) XML-документа не является элементом верхнего уровня. Это родительский элемент верхнего уровня. Это сбивает с толку, потому что не похоже, что элемент верхнего уровня может иметь родителя. Разве это не верхний уровень?

Но посмотрите на это, хорошо сформированный XML-документ:

<?xml-stylesheet href="my_transform.xsl" type="text/xsl"?>
<!-- Comments and processing instructions are XML nodes too, remember. -->
<TopLevelElement/>

Корень этого документа состоит из трех дочерних элементов: команды обработки, комментария и элемента.

Итак, например, если вы хотите написать преобразование, которое избавилось от этого комментария, но оставлено в любых комментариях, появляющихся где-либо еще в документе, вы должны добавить это к преобразованию идентичности:

<xsl:template match="/comment()"/>

Еще проще (и более полезно), здесь шаблон XPath, соответствующий элементу верхнего уровня документа, независимо от его имени: /*.

Ответ 3

Атрибут соответствия указывает, к каким частям будет применено преобразование шаблона. В этом конкретном случае "/" означает корень XML-документа. Значение, которое вы должны указать в атрибуте match, должно быть выражением XPath. XPath - это язык, который вы должны использовать для ссылки на определенные части целевого XML файла.

Чтобы получить осмысленное представление о том, что еще можно вставить в атрибут соответствия, необходимо понять, что такое xpath и как его использовать. Я предлагаю вам посмотреть ссылки, которые я вам предоставил, в нижней части ответа.

Могу ли я написать "таблица" или любой другой HTML-тег вместо "/"?

Да, ты можешь. Но это зависит от того, что именно вы пытаетесь сделать. если ваш целевой xml файл содержит элементы HMTL, и вы пытаетесь применить к ним этот xsl: template, имеет смысл использовать table, div или anithing.

Вот несколько ссылок: