[英]XSLT validate and concatenate if parameter is invalid
我有一些需要驗證的xsl:parameter
,並且在 detail 元素中我想連接無效參數的名稱。
我有驗證參數的檢查,但我無法構建詳細元素。 在該元素中,我需要將無效參數用“,”分隔。
對於此輸入:param1 = 123 和 param2 = 50,詳細元素應如下所示: <detail>param1, param2</detail>
我怎樣才能做到這一點?
這是我目前擁有的代碼:
<xsl:template name="validate">
<invalidParams>
<jsonArray>
<xsl:if test="not(fn:matches($param1, '[0-9]{9}'))">
<xsl:call-template name="invalidParam1" />
</xsl:if>
<xsl:if test="not(fn:matches($param2, '^(0?[1-9]|1[0-9]|2[0-9])$'))">
<xsl:call-template name="invalidParam2" />
</xsl:if>
</jsonArray>
</invalidParams>
<detail>
???
</detail>
</xsl:template>
為了避免多次測試參數,我建議您按照以下方式定義一個變量:
<xsl:variable name="params">
<param name="param1" value="{$param1}" isValid="{matches($param1, '[0-9]{9}')}"/>
<param name="param2" value="{$param2}" isValid="{matches($param2, '^(0?[1-9]|1[0-9]|2[0-9])$')}"/>
</xsl:variable>
然后,您可以使用以下方法填充detail
元素:
<detail>
<xsl:value-of select="$params/param[@isValid='false']/@name" separator=","/>
</detail>
並更改您的模板調用以利用該變量。
使用:
<xsl:sequence select="
string-join(
(
'param1'[$param1[not(matches(., '[0-9]{9}'))]],
'param2'[$param2[not(matches(., '^(0?[1-9]|1[0-9]|2[0-9])$'))]]
),
', ')"/>
==============================
完整代碼示例:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="param1" select="'123'"/>
<xsl:param name="param2" select="'50'"/>
<xsl:template match="/*">
<detail>
<xsl:sequence select="
string-join(
(
'param1'[$param1[not(matches(., '[0-9]{9}'))]],
'param2'[$param2[not(matches(., '^(0?[1-9]|1[0-9]|2[0-9])$'))]]
),
', ')"/>
</detail>
</xsl:template>
</xsl:stylesheet>
當將此轉換應用於任何 XML 文檔(未使用)時,將產生所需的正確結果:
<detail>param1, param2</detail>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.