XSL xsl: template match = "/" - PullRequest
       9

XSL xsl: template match = "/"

52 голосов
/ 27 июня 2010

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

xsl:template match="/"

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

Ответы [ 3 ]

119 голосов
/ 27 июня 2010

Значение атрибута 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()">

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

40 голосов
/ 28 июня 2010

Стоит отметить, поскольку для новичков в 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, который соответствует элементу верхнего уровня документа независимо от его имени: /*.

8 голосов
/ 27 июня 2010

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

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

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

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

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

...