2015-04-25 7 views
0

У меня есть ниже XML в качестве входных данных, для которых я должен делать трансформации XSLвыбора конкретного значения столбца из входного XML

<emml> 
    <tradeEventHeader> 
     <tradeIdentifier> 
      <tradeId>104823343913</tradeId> 
      <systemReference>RDS</systemReference> 
      <systemDomainName>Internal</systemDomainName> 
     </tradeIdentifier> 
     <tradeStateIdentifier> 
      <tradeStateId>Validated</tradeStateId> 
      <systemReference>RDS</systemReference> 
      <tradeStateIdClassificationScheme>Vn State</tradeStateIdClassificationScheme> 
     </tradeStateIdentifier> 
     <tradeStateIdentifier> 
      <tradeStateId>Pending</tradeStateId> 
      <systemReference>Swapswire</systemReference> 
      <tradeStateIdClassificationScheme>Mang State</tradeStateIdClassificationScheme> 
     </tradeStateIdentifier> 
     <tradeStateIdentifier> 
      <tradeStateId>accpt_novated_sw</tradeStateId> 
      <systemReference>RDS</systemReference> 
      <tradeStateIdClassificationScheme>Clearing State</tradeStateIdClassificationScheme> 
     </tradeStateIdentifier> 
    </tradeEventHeader> 
    <emmlExtension systemId="RDS YTO"> 
     <emmlMediumString idref="legId1" name="Roll Date Option">Short Initial</emmlMediumString> 
    </emmlExtension> 
</emml> 

, как показано выше, во входном XML основном моя цель состоит в том, чтобы определить значение tradeStateIdClassificationScheme, и если значение этого параметра равно «Состояние очистки», то с этим мне нужно проверить значение другого столбца tradeStateId, и если значение столбца tradeStateId начинается с accpt_novated_sw, тогда в этом случае нам нужно вернуть истинная строка и для остальных других мне нужно вернуть ложную строку.

я придумал ниже шаблон в XSLT 1.0, пожалуйста, сообщите это правильный подход ..

призывающую шаблона: -

<isClearedNovated> 
      <xsl:call-template name="cleared_novated"> 
      <xsl:with-param name="tradeStateId" select="emml/*/*/tradeStateIdentifier" /> 
      </xsl:call-template> 
      </isClearedNovated> 


called template :-  



<xsl:template name="cleared_novated"> 
     <xsl:param name="tradeStateId" /> 

     <xsl:for-each select="$tradeStateId/tradeStateIdClassificationScheme"> 
      <xsl:choose> 
      <xsl:when test="$tradeStateId[starts-with(tradeStateIdClassificationScheme,'accpt')] and systemReference='RDS'"> 
       <xsl:value-of select="'true'"/> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="'false'"/> 
      </xsl:otherwise> 
     </xsl:choose> 
     </xsl:for-each> 
    </xsl:template> 

ответ

1

Я не очень понимаю, что именно ваши потребности, но ваш XSLT, вероятно, не то, что вы хотите, - я подозреваю, что он ничего не делает ...

Так, может быть, мы можем начать с предложением ниже и вы можете сказать, что должно быть уточнено:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="text"/> 

    <xsl:template match="/"> 
    <xsl:apply-templates select="//tradeStateIdClassificationScheme"/> 
    </xsl:template> 

    <xsl:template match="tradeStateIdClassificationScheme[ 
          . = 'Clearing State' and 
          ../tradeStateId = 'accpt_novated_sw' and 
          ../systemReference = 'RDS' 
          ]"> 
    <xsl:value-of select="concat(.,': true&#x0a;')"/> 
    </xsl:template> 

    <xsl:template match="tradeStateIdClassificationScheme"> 
    <xsl:value-of select="concat(.,': false&#x0a;')"/> 
    </xsl:template> 


    <xsl:template match="@*|*"/> 
</xsl:transform> 

Вы найдете два шаблона, имеющих дело с tradeStateIdClassificationScheme, один соответствует вашим условиям и один для всех остальных.

Обратите внимание, что вы не писали о содержании systemReference, в то время как ваш пробный шаблон обращается к этому элементу. Поэтому я добавил это условие.

Выход в этой версии:

Vn State: false 
Mang State: false 
Clearing State: true 
+0

Благодаря вы можете также, пожалуйста, сообщите он будет работать в XSLT 1.0 также. – asderfgh

+0

Да, это трансформация версии 1.0. – leu

+0

Большое спасибо, вы также можете посоветовать, скажем, я хочу, чтобы только состояние очистки было истинным, чтобы печатать только тогда, как я могу достичь этого – asderfgh

Смежные вопросы