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