【发布时间】:2013-09-20 16:03:16
【问题描述】:
我的xml如下:
<valid_path>
<document var_name="some_value">
<processControls>
<p>Lots of good text here ...</p>
<ul class="unIndentedList">
<li> Graphical display of system</li>
<li> Other bulleted items ...</li>
</ul>
<p>etc. etc. etc.</p>
</processControls>
</document>
</valid_path>
我的输入是由这个决定的:
<xsl:variable name="processControlsValue" select="/valid_path/document[@var_name='some_value']/processControls" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>
我正在调用递归模板来替换在某些输入中找到的给定字符串。调用如下。
<xsl:call-template name="bulRep">
<xsl:with-param name="text" select="$processControlsValue"/>
<xsl:with-param name="replace" select="'Graphical'"/>
<xsl:with-param name="by" select="'foofoobars'"/>
</xsl:call-template>
这是模板。
<xsl:template name="bulRep">
<xsl:param name="text"/>
<xsl:param name="replace"/>
<xsl:param name="by"/>
<xsl:choose>
<xsl:when test="contains($text, $replace)">
<xsl:value-of select="substring-before($text,$replace)"/>
<xsl:value-of select="$by"/>
<xsl:call-template name="bulRep">
<xsl:with-param name="text" select="substring-after($text,$replace)"/>
<xsl:with-param name="replace" select="$replace"/>
<xsl:with-param name="by" select="$by"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
<!--<xsl:apply-templates select="$text" />-->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
模板的工作原理是替换找到的文本。 (例如,“Graphical”确实被“foofoobars”取代)我遇到的问题是丢失了 value-of 或 copy-of 的格式。我意识到 value-of 将返回文本,而不是文本和格式,并且我发现许多帖子指示其他人使用 copy-of 来保留格式。但是,这不起作用。输出只是一个连续的文本行。
现在,如果我使用 apply-templates 行(当前已注释掉)而不是 value-of 行,并确保我点击了模板的“否则”部分,我会得到所需的输出。我会得到段落、项目符号列表等。但是使用 value-of 或 copy-of 只会获取文本,如果存在字符串匹配,使用 apply-templates 会中断。
我的最终结果是使用 xsl-fo 的 PDF。
我现在看到的:
这里有很多很好的文字...系统的foofoobars显示其他项目符号项...等等等等等等
我想看的:
这里有很多好文...
• 系统的foofoobars 显示
• 其他项目符号...
等等。等等等等。
【问题讨论】:
-
你能说明你是如何设置变量$processControlsValue的吗?查找和替换模板假定它只是传递文本,但如果你传递一个包含节点列表的变量,那么它将无法按预期工作。您能否编辑您的问题以显示您的输入样本和您期望的输出,然后我们可以帮助调整您的方法。我认为它不需要任何重大改变。谢谢!
-
@TimC - 感谢您的跟进。我已经添加了我的输入。使用应用模板在输出中正确显示输入。我就停在那里。但是,有一些布局问题我需要纠正,所以我需要使用递归替换模板。
-
我们需要查看您输入的 XML 结构。
-
我已经用 xml 更新了我的帖子。