簡體   English   中英

XSLT 如果參數無效,則驗證並連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM