【发布时间】:2018-11-01 14:06:26
【问题描述】:
我的任务是作为 POC 第一次做一些 xslt 并在解决方案中磕磕绊绊。我的问题 能够在匹配发生时用我的函数返回的内容替换节点的内容。在 那一刻我在将它放在一起时遇到问题,以至于运行标签内的原始文本也无法通过 因为当测试为 TRUE 时,应该用我的句柄链接函数定义的内容替换它。 michael.hor257k 给了 在以前的帖子中针对我的问题提出了一些很好的建议,该帖子现已关闭,但我仍然对正确的语法感到困惑 我需要申请才能达到预期的结果。如果有人可以帮助我进行正确的修改,那将是 非常好,非常感谢。
给定以下 XML。
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<par def='15'>
<run>
<font size='8pt' name='Verdana' pitch='variable' truetype='true'
familyid='20' color='navy'/>[<a href="www.google.com.au" target="_new">Google</a>]
</run>
</par>
</catalog>
并应用正确的 XSLT(我需要帮助)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My Transform</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="run">
<font name='Verdana' size='14pt'>
<xsl:call-template name="handle-links">
<xsl:with-param name="txt" select="."/>
</xsl:call-template>
</font>
</xsl:template>
<xsl:template name="handle-links">
<xsl:param name="txt"/>
<xsl:if
test="contains($txt,'[<a')">
<xsl:variable name="quotes">"</xsl:variable>
<!-- Get URL -->
<xsl:variable name="urlVar" select='substring-before(substring-after($txt, $quotes), $quotes)'/>
<!-- Get Link Name -->
<xsl:variable name="linkName" select='substring-before(substring-after($txt, ">"), "<")'/>
<a href="{$urlVar}">
<xsl:value-of select="$linkName"/>
</a>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
如果并且仅当测试 test="contains($txt,'[ 为真时,我正在尝试实现类似以下的目标。
<font name='Verdana' size='14pt'>
<a href="www.google.com">Google</a>
</font>
如果测试 test="contains($txt,'[&lt;a')"> 为 FALSE,那么我只希望 <font name = 'Verdana' size='14pt'> </font> 标记围绕运行元素的 text() 内容。
干杯,
【问题讨论】:
-
在
contains($txt,'[<a')为真的情况下,上述XSLT 确实会输出您想要的内容。它只是您需要帮助的“虚假”案例吗?谢谢! -
嗨蒂姆,是的,我也需要它来处理错误情况。我一直在 XSLT Tryit Editor v1.2 中使用不同的排列,并且无法获得上述代码来生成输出,因此假设它存在问题。如果有更好的编辑器可用于试验/调试,请告诉我,因为它将有助于该项目的未来工作。干杯