Что делает этот XSLT-код? - PullRequest
       3

Что делает этот XSLT-код?

2 голосов
/ 23 января 2012

Я новичок в XSLT. У меня есть блочный код, который я не понимаю.

В следующем блоке, что означают '*','*[@class='vcard']' и '*[@class='fn']'?

<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">   <xsl:output method="html" encoding="utf-8"/>   <xsl:template match="/">
    <script type="text/javascript">
      <xsl:text><![CDATA[function show_hcard(info) {
      win2 = window.open("about:blank", "HCARD", "width=300,height=200," +      "scrollbars=no menubar=no, status=no, toolbar=no, scrollbars=no");
      win2.document.write("<h1>HCARD</h1><hr/><p>"   + info + "</p>");  win2.document.close();
    }]]></xsl:text>
    </script>
    <xsl:apply-templates/>   </xsl:template>

  <xsl:template match="*">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:apply-templates/>
    </xsl:copy>   </xsl:template>

  <xsl:template match="*[@class='vcard']">
    <xsl:apply-templates/>   </xsl:template>

  <xsl:template match="*[@class='fn']">
    <u>
      <a>
        <xsl:attribute name="onMouseDown">
          <xsl:text>show_hcard('</xsl:text>
          <xsl:value-of select="text()"/>
          <xsl:text>')</xsl:text>
        </xsl:attribute>
        <xsl:value-of select="text()"/>
      </a>
    </u>   </xsl:template> </xsl:stylesheet>

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Ваша таблица стилей имеет четыре правила шаблона. На английском языке эти правила:

(a) начинающийся сверху (match = "/"), сначала выведите элемент script, затем обработайте следующий уровень вниз (xsl: apply-templates) во входных данных.

(b) правило по умолчанию для элементов (match = "*") заключается в создании нового элемента в выходных данных с тем же именем и атрибутами, что и в оригинале, и создании его содержимого путем обработки следующего уровня в вход.

(c) правило для элементов с атрибутом class = "vcard" - ничего не делать с этим элементом, кроме как обрабатывать следующий уровень на входе.

(d) правило для элементов с атрибутом class = "fn" должно выводить

<u><a onMouseDown="show_hcard('X')">X</a></u>

где X - текстовое содержимое обрабатываемого элемента.

Более опытный пользователь XSLT написал бы последнее правило как

<xsl:template match="*[@class='fn']">
    <u>
      <a onMouseDown="show_hcard('{.}')">
        <xsl:value-of select="."/>
      </a>
    </u>   
</xsl:template>
2 голосов
/ 23 января 2012

* соответствует всем элементам, шаблон *[@class='vcard'] соответствует всем элементам с атрибутом class значения vcard. Из этого вы можете понять, что может означать *[@class='fn']; -)

Я бы также посоветовал вам начать здесь .

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