Мое приложение генерирует отчеты HTML, применяя XSL к входному документу XML.Мы все еще используем версию 1.0 XSLT с синтаксическим анализатором Saxon (saxon9he.jar).Это работает нормально, за исключением случаев, когда во входном документе есть пустые самозакрывающиеся узлы.Ниже приведен фрагмент кода из входного XML и шаблона XSL, в котором возникла проблема при обработке ввода.
Когда ниже вызывается шаблон для любого из пустых дочерних узлов, например, для: или преобразованиявзрывается .. нет исключений .. он просто висит.Вероятно, это небольшая настройка, необходимая для обработки таких пустых узлов.
PLease предлагает правильный способ обработки пустого узла, переданного в шаблон через xsl: param, чтобы решить эту проблему!
У меня естьпопытался вставить обычный код для проверки пустой строки в параметре, но ничего не помогло.Поскольку передается узел, а не просто строка, я не уверен, как проверить наличие пустого узла через переданный параметр (xsl: param)
XML-ввод:
<Parent>
<xyz/>
<seq>0.00</seq>
<abc/>
<def/>
<name/>
<desc>PLACE HOLDER</desc>
</Parent>
XSL:
<xsl:for-each select="//zz:Parent">
<tr>
<xsl:for-each select="*">
<td align="left" class="whitebackground">
<font class="tabledata">
<xsl:if test="not(./@*)">
<xsl:call-template name="break">
<xsl:with-param name="text" select="."/>
</xsl:call-template>
</xsl:if>
</font>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
xsl:template name="break">
<xsl:param name="text"/>
<xsl:choose>
<xsl:when test="contains($text, '
')">
<xsl:value-of select="substring-before($text, '
')"/>
<br/>
<xsl:call-template name="break">
<xsl:with-param name="text" select="substring-after($text,'
')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<!--disable-output-escaping='yes'-->
<xsl:if test="string-length($text) > 100">
<div style="width:200pt; word-wrap: break-word;"><xsl:value-of select="$text"/></div>
</xsl:if>
<xsl:if test="not(string-length($text) > 100)">
<xsl:value-of select="$text"/>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Ожидаемый результат состоит в том, что все значения для дочерних узлов отображаются в табличном формате, включая пробелы для любых столбцов