Добавить атрибут к результату xsl: apply-import - PullRequest
2 голосов
/ 01 марта 2010

У меня есть таблица стилей XSL (A), которая импортирует другую (B). A переопределяет шаблон (t) в B и вызывает шаблон B с apply-import:

От A:

<xsl:template match="t">
    <xsl:apply-imports/>
</xsl:template>

От B:

<xsl:template match="t">
    <p><!-- Do something --></p>
</xsl:template>

Теперь я хочу, чтобы A добавил атрибут к фрагменту (<p> ... </p>), возвращаемый apply-import. Атрибут должен быть добавлен к элементу p напрямую, p не должен быть включен в другой элемент. Как я могу это сделать?

С уважением, Jochen

Ответы [ 4 ]

1 голос
/ 01 марта 2010

ИМХО, ты не можешь.

B является автономным, когда его соответствующий шаблон завершает работу, тогда <p> уже построен в дереве результатов и недоступен для A.

0 голосов
/ 23 сентября 2017

В XSLT1 вы можете достичь желаемого результата, используя переменную, чтобы захватить исходный вывод шаблона, а затем изменить его. К сожалению, для этого требуется внешняя функция exsl:node-set для преобразования из фрагмента дерева результатов в набор узлов.

(протестировано с xsltproc)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:exsl="http://exslt.org/common" exclude-result-prefixes="exsl"
                ...
                version='1.0'>

<xsl:import href="B.xsl" />

<xsl:template match="t">
  <!-- capture inherited template result -->
  <xsl:variable name="baseresult">
    <xsl:apply-imports/>
  </xsl:variable>
  <!-- apply custom transformation each node of the result -->
  <xsl:for-each select="exsl:node-set($baseresult)/node()">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:attribute name="class">overrided</xsl:attribute>
      <xsl:copy-of select="node()"/>
    </xsl:copy>
  </xsl:for-each>
</xsl:template>

</xsl:stylesheet>
0 голосов
/ 04 марта 2010

Можете ли вы добавить параметр в шаблон B и включить его в соответствие A?Таким образом, вы можете добавить требуемый атрибут, контролируемый соответствием А.

0 голосов
/ 01 марта 2010

Подумайте о некоторой предварительной обработке для B. В конце концов, это всего лишь XML.

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