У меня было чертовски много времени, чтобы избавиться от проблемы с XSL, которая у меня есть.
По сути, у меня есть соответствующий шаблон, который вызывает именованный шаблон в другом файле XSL.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:include href="/_internal/stylesheets/core/common" />
<xsl:template match="system-page">
<div id="main">
<div class="pageHeading">
<h1><system-page-display-name /> </h1>
<xsl:if test="current()/dynamic-metadata[name='Printable']/value='true' or current()/dynamic-metadata[name='Shareable']/value='true'">
<xsl:call-template name="shareAndPrint">
<xsl:with-param name="shareable" select="current()/dynamic-metadata[name='Shareable']/value" />
<xsl:with-param name="printable" select="current()/dynamic-metadata[name='Printable']/value" />
</xsl:call-template>
</xsl:if>
</div>
<xsl:copy-of select="current()//system-data-structure/html/node()"/>
</div>
</xsl:template>
Затем, в другом файле, вот шаблон, который я вызываю:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:spring="http://www.springframework.org/tags" version="1.0">
<xsl:template name="shareAndPrint">
<xsl:param name="shareable"/>
<xsl:param name="printable"/>
<div class="shareBar">
<xsl:if test="$printable = 'true'">
<a class="print" href="javascript:window.print();"><spring:message code="print.label" /></a>
</xsl:if>
<xsl:if test="$shareable = 'true'">
<span class="st_sharethis" id="shareThis"></span>
</xsl:if>
</div>
<xsl:if test="$shareable = 'true'">
<script type="text/javascript">$('#shareThis').attr('displayText','ShareThis');</script>
<script src="http://w.sharethis.com/button/buttons.js" type="text/javascript"></script>
</xsl:if>
</xsl:template>
Как видите, я в основном использую XSL для создания JSP-файла с тегами spring:message для перевода нашего сайта.
И моя проблема в основном заключается в том, что независимо от того, что я делаю, вывод XML всегда заканчивается элементами HTML с xmlns:spring="http://www.springframework.org/tags" на них. Я видел много других сообщений, связанных с такой проблемой, но, похоже, ни одно из решений не работает для меня.
Вот пример вывода:
<div id="main">
<div class="pageHeading"><h1>CR-HTML-Static-WRS-en - test </h1>
<div class="shareBar" xmlns:spring="http://www.springframework.org/tags">
<a class="print" href="javascript:window.print();">
<spring:message code="print.label" />
</a>
<span class="st_sharethis" id="shareThis" ></span>
</div>
<script type="text/javascript" xmlns:spring="http://www.springframework.org/tags">$('#shareThis').attr('displayText','ShareThis');</script>
<script src="http://w.sharethis.com/button/buttons.js" type="text/javascript" xmlns:spring="http://www.springframework.org/tags" ></script>
</div>TEST CR</div>
Я попытался добавить префиксы exclude-result-prefixs в теги xsl:stylesheet, и хотя это удаляет xmlns из элементов HTML, вместо этого он добавляется в тег spring:message, который не будет работать при анализе JSP ( xmlns является недопустимым атрибутом spring:message). Поэтому я не уверен, что я делаю неправильно или что еще я могу попробовать.
Пожалуйста, если у кого-то есть какие-либо идеи или решения для этого, я был бы очень признателен. Извините, если что-то упустил, при необходимости добавлю.
Заранее спасибо.