2014-12-04 3 views
0

У меня есть следующий XML:XSLT «когда тест» не работает правильно

<?xml version="1.0" encoding="UTF-8"?> 
<ClaimSystemConfig> 
    <MHC> 
     <businessArea>Test2</businessArea> 
    </MHC> 
    <MHC> 
     <businessArea>Test1</businessArea> 
    </MHC> 
    <PowerSTEPP> 
     <businessArea>Test3</businessArea> 
    </PowerSTEPP> 
    <Amisys> 
     <businessArea>CSAAQA</businessArea> 
     <WADL> 
     <url>Blah</url> 
     <services> 
      <service> 
       <name>authSearch</name> 
       <tenant>rest/clientd/</tenant> 
       <version>1</version> 
      </service> 
      <service> 
       <name>memberSearch</name> 
       <tenant>rest/clientd/</tenant> 
       <version>1</version> 
      </service> 
      <service> 
       <name>memberSummary</name> 
       <tenant>rest/clientd/</tenant> 
       <version>3</version> 
      </service> 
      </services> 
     </WADL> 
    </Amisys> 
</ClaimSystemConfig> 

Теперь я хочу изменить приведенный выше XML с помощью XSLT только если один из <service> тега имеет <name> в memberSummary и <version> как 3. Я стараюсь со следующим условием, но он не работает.

<xsl:choose> 
    <xsl:when test="//ClaimSystemConfig/Amisys/WADL/services/service[name='memberSummary' and version=3]"> 
    ......do something..... 
    </xsl:when> 
    <xsl:otherwise> 
    ...do nothing...  
    </xsl:otherwise> 
</xsl:choose> 

Может ли кто-нибудь помочь мне в создании правильного состояния?

Вот парциальное XSLT:

<xsl:choose> 
          <xsl:when test="//ClaimSystemConfig/Amisys/WADL/services/service[name='memberSummary' and version=3]"> 
           <type>WADL</type> 
           <METHOD>POST</METHOD> 
           <service>memberSummary</service> 
           <requestSpecific>healthplan/memberstatuses</requestSpecific> 
           <inputSchema> 
            <ver:routeData xmlns:ver="version3"> 
            </ver:routeData> 
           </inputSchema> 
           <parms> 
            <parm> 
             <name>eao</name> 
             <value><xsl:value-of select="eao"/></value> 
            </parm> 
           </parms> 
          </xsl:when> 
          <xsl:otherwise> 

          </xsl:otherwise> 
    </xsl:choose> 
+0

Это поможет, если вы более подробно объясните, что не работает. Вы получаете сообщение об ошибке в этом случае или неожиданный вывод? Отображение ожидаемого результата, а также фактического вывода поможет много. Благодаря! –

+0

C @ Тим, когда я проверить состояние вне с помощью любого инструмента Xpath Tester, он возвращает мне результат 'Element = ' memberSummary отдых/clientd/ ' ', но когда Я включаю одно и то же изменение в моем приложении, управление не происходит в состоянии 'когда'. Похоже, что что-то не так. –

+0

Думаю, вам нужно показать немного больше вашего XSLT. Если вы можете предоставить полный, но минимальный пример XSLT, который демонстрирует проблему, это поможет. Вы уверены, что он даже достигает, например, 'xsl: choose'? –

ответ

2

В настоящее время, когда вы запустите следующий XSLT на вашем XML результат действительно "... сделать что-то ..."

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:template match="/"> 
     <xsl:choose> 
      <xsl:when test="//ClaimSystemConfig/Amisys/WADL/services/service[3][name='memberSummary' and version=3]"> 
      ......do something..... 
      </xsl:when> 
      <xsl:otherwise> 
      ...do nothing...  
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 

Но он будет «делать что-то», только если элемент service является третьим в списке. Таким образом, вам нужно будет изменить его на это:

<xsl:when test="//ClaimSystemConfig/Amisys/WADL/services/service[name='memberSummary' and version=3]"> 
Смежные вопросы