首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT3.0断言和迭代后的异常抛出

XSLT3.0断言和迭代后的异常抛出
EN

Stack Overflow用户
提问于 2021-01-04 05:29:42
回答 1查看 73关注 0票数 0

我有包含依赖组件的XSLT模块:迭代、验证和…。

输入示例port1.xml

代码语言:javascript
复制
<valuationDocument>
  <valuationSet id="val1">
    <assetValuation>
      <objectReference href="tid-1" />
      <quote>
        <value>1000000</value>
        <sensitivitySet>
          <sensitivity name="SEP21">0.707</sensitivity>
          <sensitivity name="2Y">1.82</sensitivity>
          <sensitivity name="3Y">2.73</sensitivity>
          <sensitivity name="4Y">3.68</sensitivity>
          <sensitivity name="5Y">4.51</sensitivity>
          <sensitivity name="7Y">3.64</sensitivity>
          <sensitivity name="10Y">9.06</sensitivity>
          <sensitivity name="MAR21">0.315</sensitivity>
          <sensitivity name="15Y">13.59</sensitivity>
        </sensitivitySet>
      </quote>
    </assetValuation>
    <assetValuation>
      <objectReference href="tid-2" />
      <quote>
        <value>1100000</value>
        <sensitivitySet>
          <sensitivity name="SEP21">0.947</sensitivity>
          <sensitivity name="MAR21">0.502</sensitivity>
          <sensitivity name="2Y">1.91</sensitivity>
          <sensitivity name="3Y">2.84</sensitivity>
          <sensitivity name="4Y">3.72</sensitivity>
          <sensitivity name="5Y">4.63</sensitivity>
          <sensitivity name="7Y">3.71</sensitivity>
          <sensitivity name="10Y">9.15</sensitivity>
          <sensitivity name="15Y">13.64</sensitivity>
        </sensitivitySet>
      </quote>
    </assetValuation>
  </valuationSet>
</valuationDocument>

i对iteration组件(使streaming…失效)相当满意。。迭代结果如下:

代码语言:javascript
复制
<valuationDocument>
   <valuationSet id="val1">
      <assetValuation>
         <objectReference href="tid-1"/>
         <quote>
            <value>1000000</value>
            <BasisPointValue>
               <shiftUp units="100bp" sensitivityName="SEP21" sensitivity="0.707">992,930.00</shiftUp>
               <shiftDown units="100bp" sensitivityName="SEP21" sensitivity="0.707">1,007,070.00</shiftDown>
==========================================================================================
               <shiftUp units="100bp" sensitivityName="15Y" sensitivity="13.59">864,100.00</shiftUp>
               <shiftDown units="100bp" sensitivityName="15Y" sensitivity="13.59">1,135,900.00</shiftDown>
            </BasisPointValue>
            <sensitivitySet>
               <sensitivity name="SEP21">0.707</sensitivity>
               <sensitivity name="2Y">1.82</sensitivity>
               <sensitivity name="3Y">2.73</sensitivity>
               <sensitivity name="4Y">3.68</sensitivity>
               <sensitivity name="5Y">4.51</sensitivity>
               <sensitivity name="7Y">3.64</sensitivity>
               <sensitivity name="10Y">9.06</sensitivity>
               <sensitivity name="MAR21">0.315</sensitivity>
               <sensitivity name="15Y">13.59</sensitivity>
            </sensitivitySet>
         </quote>
      </assetValuation>
      <assetValuation>
        <objectReference href="tid-2" />
           <quote>
              <value>1100000</value>
            <BasisPointValue>
               <shiftUp units="100bp" sensitivityName="SEP21" sensitivity="0.947">1,089,583.00</shiftUp>
               <shiftDown units="100bp" sensitivityName="SEP21" sensitivity="0.947">1,110,417.00</shiftDown>
==========================================================================================
               <shiftUp units="100bp" sensitivityName="15Y" sensitivity="13.64">949,960.00</shiftUp>
               <shiftDown units="100bp" sensitivityName="15Y" sensitivity="13.64">1,250,040.00</shiftDown>
            </BasisPointValue>
            <sensitivitySet>
               <sensitivity name="SEP21">0.947</sensitivity>
               <sensitivity name="MAR21">0.502</sensitivity>
               <sensitivity name="2Y">1.91</sensitivity>
               <sensitivity name="3Y">2.84</sensitivity>
               <sensitivity name="4Y">3.72</sensitivity>
               <sensitivity name="5Y">4.63</sensitivity>
               <sensitivity name="7Y">3.71</sensitivity>
               <sensitivity name="10Y">9.15</sensitivity>
               <sensitivity name="15Y">13.64</sensitivity>
            </sensitivitySet>
         </quote>
      </assetValuation>
   </valuationSet>
</valuationDocument>

我想在迭代结果完成后立即验证它。如果任何验证失败,则报告异常并终止程序。但是,验证在迭代之后并不是。(实际的验证是通过xsl:try|catch引发异常,如果任何断言失败,则终止)验证逻辑是将sensitivitySet/sensitivity的三种指标与迭代和转换的BasisPointValue/shiftUp|shiftDown/@sensitivity进行比较(注意: xsl:text是模拟异常抛出,显然XSLT编辑器无法发出消息)

代码语言:javascript
复制
    <xsl:variable name="MinE">
        <!-- <xsl:message terminate="yes">Fatal Error: Minimum NPV and BPV sensitivity is different</xsl:message>-->
        <xsl:text>&#x9;&#xA;</xsl:text>
        <xsl:text>Retro: Min NPV and BPV sensitivity</xsl:text>
        <xsl:text>&#x9;&#xA;</xsl:text>
    </xsl:variable> 
    <xsl:variable name="MaxE">
        <!--<xsl:message terminate="yes">Fatal Error: Maximum NPV and BPV sensitivity is different</xsl:message>-->
        <xsl:text>&#x9;&#xA;</xsl:text>
        <xsl:text>Retro: Max NPV and BPV sensitivity</xsl:text>
        <xsl:text>&#x9;&#xA;</xsl:text>
    </xsl:variable> 
    <xsl:variable name="AvgDownE">
        <!--<xsl:message terminate="yes">Fatal Error: Average NPV and BPV ShiftDown sensitivity is different</xsl:message>-->
        <xsl:text>&#x9;&#xA;</xsl:text>
        <xsl:text>Retro: Average NPV and BPV ShiftDown</xsl:text>
        <xsl:text>&#x9;&#xA;</xsl:text>
    </xsl:variable>
    
    <xsl:template match="/">
        <xsl:source-document href="port1.xml">
             <xsl:apply-templates select="valuationDocument" mode="val"/>
        </xsl:source-document>
    </xsl:template>

    <xsl:template match="sensitivitySet" mode="val">

<!--  ITERATION -->     
    ==========================================
        <!--        <xsl:apply-imports/>-->
         <xsl:copy-of select="."/>
        <xsl:apply-templates select="parent::quote" mode="validation"/>
    </xsl:template>
  
<!--  VALIDATION -->
    <xsl:template match="quote" mode="validation" expand-text="yes">
        <Assertion>
             <xsl:variable name="m" as="map(*)">
                <xsl:map>
                   <xsl:map-entry key="'min-npv'" select="min(outermost(descendant::sensitivity)/number())"/>
                   <xsl:map-entry key="'max-npv'" select="max(outermost(descendant::sensitivity)/number())"/>
                   <xsl:map-entry key="'min-bpv'" select="min(outermost(descendant::BasisPointValue//@sensitivity)/number())"/>
                   <xsl:map-entry key="'max-bpv'" select="max(outermost(descendant::BasisPointValue//@sensitivity)/number())"/>
                   <xsl:map-entry key="'avg-npv'" select="avg(outermost(descendant::sensitivity)/number())"/>
                   <xsl:map-entry key="'avg-bpv-down'" select="avg(outermost(descendant::BasisPointValue/shiftDown/@sensitivity)/number())"/>
                 </xsl:map>
              </xsl:variable>
                    <xsl:choose>
                        <xsl:when test="deep-equal($m('min-npv'), $m('min-bpv'))">
                            <xsl:value-of select="$MinE"/>
                        </xsl:when>
                        <xsl:when test="deep-equal($m('max-npv'), $m('max-bpv'))">
                            <xsl:value-of select="$MaxE"/>
                        </xsl:when>
                        <xsl:when test="deep-equal($m('avg-npv'), $m('avg-bpv-down'))">
                            <xsl:value-of select="$AvgDownE"/>
                        </xsl:when>
                        <xsl:otherwise><xsl:value-of select="'Validation Succeeds!'"/></xsl:otherwise>
                    </xsl:choose>
        </Assertion> 
    </xsl:template>

迭代后的XSLT3.0验证解决方案是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-14 00:09:05

如果我正确理解这个问题,这是一个标准的多相转换。您可以使用两个单独的样式表,使用一些外部API将它们链接在一起(例如shell脚本、Ant/gradle、XProc、Java应用程序),也可以使用逻辑将两个阶段放在同一个样式表中。

代码语言:javascript
复制
<xsl:variable name="temp">
  <xsl:apply-templates select="/" mode="phase-1"/>
</xsl:variable>
<xsl:apply-templates select="$temp" mode="phase-2"/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65558051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档