Я просто изучаю XML и как использовать XSL файлы. В XSL файле я нашел следующий термин:
xsl:template match="/"
Что это значит?
И что я мог использовать вместо /
?
Могу ли я написать table
или любой другой тег HTML вместо /
?
Я просто изучаю XML и как использовать XSL файлы. В XSL файле я нашел следующий термин:
xsl:template match="/"
Что это значит?
И что я мог использовать вместо /
?
Могу ли я написать table
или любой другой тег HTML вместо /
?
Значение атрибута 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()">
может применяться к любому узлу: элементу, тексту, комментарию или инструкции по обработке.
Стоит отметить, поскольку это путает для людей, новичков в 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, соответствующий элементу верхнего уровня документа, независимо от его имени: /*
.
Атрибут соответствия указывает, к каким частям будет применено преобразование шаблона. В этом конкретном случае "/" означает корень XML-документа. Значение, которое вы должны указать в атрибуте match, должно быть выражением XPath. XPath - это язык, который вы должны использовать для ссылки на определенные части целевого XML файла.
Чтобы получить осмысленное представление о том, что еще можно вставить в атрибут соответствия, необходимо понять, что такое xpath и как его использовать. Я предлагаю вам посмотреть ссылки, которые я вам предоставил, в нижней части ответа.
Могу ли я написать "таблица" или любой другой HTML-тег вместо "/"?
Да, ты можешь. Но это зависит от того, что именно вы пытаетесь сделать. если ваш целевой xml файл содержит элементы HMTL, и вы пытаетесь применить к ним этот xsl: template, имеет смысл использовать table, div или anithing.
Вот несколько ссылок: