Ну, так как никто не ответил, я просто попробовал.Хотя это проще сделать в Java, у него есть один существенный недостаток: поскольку код должен знать действительные элементы, чтобы он мог распознавать неизвестные, в конечном итоге вам придется жестко закодировать его в своем коде и перекомпилировать, еслиШаблон XSLT изменяется.
Итак, я попробовал в XSLT, и это также работает.Допустим, у вас есть:
<xsl:template match="text">
*processing*
<xsl:call-template name="id_and_class"/>
*processing*
</xsl:template>
, где шаблон с именем id_and_class копирует ваш атрибут id и классы в сгенерированный элемент, и вы хотите, чтобы неизвестные элементы были сопоставлены с элементами «text», тогда вы можете сделать это:
<xsl:template match="text">
<xsl:call-template name="text_processing"/>
</xsl:template>
<xsl:template name="text_processing">
*processing*
<xsl:call-template name="text_id_and_class"/>
*processing*
</xsl:template>
...
<xsl:template name="text_id_and_class">
<xsl:choose>
<!-- If name() is not "text", then we have an unknown element. -->
<xsl:when test="name()!='text'">
<!-- Processing of ID and class omitted ... -->
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="id_and_class"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
...
<!-- MUST BE LAST : Process unknown elements like a "text" element. -->
<xsl:template match="*">
<xsl:call-template name="text_processing"/>
</xsl:template>
Если вы обрабатываете содержимое одного определенного элемента с именованным шаблоном, вы можете проверить в этом шаблоне, совпадает ли имя, и использовать его для специальной обработки.Тогда вам просто нужно положитьв конце таблицы стилей и оттуда вызовите названный шаблон.