Какое совпадение выражений XPath в шаблонном правиле XSLT? * | / - PullRequest
0 голосов
/ 09 марта 2012

Из моего понимания XSLT я не могу понять, что ему соответствует.

<xsl:template match="*|/">

1 Ответ

2 голосов
/ 09 марта 2012

Соответствие XPath относится к «текущему узлу» (то есть текущей позиции) в сопоставляемом XML.

* соответствует всем дочерним элементам текущего узла, тогда как / соответствует корню - и только корню - независимо от того, что является текущим узлом.

Обратите внимание, что корень НЕ является корневым элементом XML, это фактически уровень над ним - корневой элемент является дочерним для корня.

Если у вас есть этот XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/|*">
      <item name="{name()}">
        <xsl:apply-templates/>
      </item>
    </xsl:template>

</xsl:stylesheet>

и вы применяете его к этому XML:

<rootElement>
  <subElement1/>
  <subElement2/>
</rootElement>

Вы получите это:

<item name="">
  <item name="rootElement">
    <item name="subElement1" />
    <item name="subElement2" />
  </item>
</item>

первые <item name=""> соответствуют совпадению / (которое не является элементом и поэтому не имеет имени), остальные - совпадения *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...