XSL xsl:template соответствуют = “/”

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

xsl:template match="/"

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

53
задан Dimitre Novatchev 30 June 2019 в 10:29
поделиться

3 ответа

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

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

121
ответ дан 7 November 2019 в 08:18
поделиться

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

40
ответ дан 7 November 2019 в 08:18
поделиться

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

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

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

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

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

8
ответ дан 7 November 2019 в 08:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: