2016-10-11 5 views
1

に対する試験条件:XSLT:以下の条件が真である場合、私は、追加のノードを作成する必要がある2つのノード

NOT(TYPE = 'WE' AND 'CH' = '真')IF - >作成MISSING新しいノード

出典:

<?xml version="1.0" encoding="UTF-8"?> 
<Partner> 
    <NR>10</NR> 
    <SR> 
     <PF> 
      <TYPE>WE</TYPE> 
      <NR>2345</NR> 
      <CH>false</CH> 
     </PF> 
     <PF> 
      <TYPE>WE</TYPE> 
      <NR>111</NR> 
      <CH>false</CH> 
     </PF> 
     <PF> 
      <TYPE>RG</TYPE> 
      <NR>999</NR> 
      <CH>true</CH> 
     </PF> 
    </SR> 
    <SR> 
    ... 
    </SR> 
</Partner> 

所望の出力:

<?xml version="1.0" encoding="UTF-8"?> 
<Partner> 
    <NR>10</NR> 
    <SR> 
     <PF> 
      <TYPE>WE</TYPE> 
      <NR>2345</NR> 
      <CH>false</CH> 
     </PF> 
     <PF> 
      <TYPE>WE</TYPE> 
      <NR>111</NR> 
      <CH>false</CH> 
     </PF> 
     <PF> 
      <TYPE>RG</TYPE> 
      <NR>999</NR> 
      <CH>true</CH> 
     </PF> 
     <XX>MISSING</XX> 
    </SR> 
    <SR> 
    ... 
    </SR> 
</Partner> 

私は本当にSTRUこの試験条件を作成するためのggle - 私は2つのノードのための内容を確認する必要があります。

<xsl:if test="not(./PF/TYPE = 'WE' and CH = 'true')"> 

私は<CH><TYPE> = 'WE'コンテキストで評価されていることを確認する必要がありますが、私はこれを行うにはありませんか...

私のXSLTは、次のようになります。

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 

<xsl:template match="Partner"> 
<PARTNER> 

    <xsl:for-each select="./SR"> 
      <SR> 
      ... 

      <xsl:copy-of select= "./PF"> 

      <xsl:if test="not(./PF/TYPE = 'WE' and CH = 'true')"> 
      <XX>MISSING</XX> 
      </xsl:if> 

      </SR> 
    </xsl:for-each> 

</PARTNER> 
</xsl:template> 
</xsl:stylesheet> 

答えて

0

あなたはあなたの条件、複数のノードによって満たすことができない複雑な式を満たすPFノードを見つける必要があります。

<xsl:if test="not(./PF[TYPE = 'WE' and CH = 'true'])"> 
    <XX>MISSING</XX> 
</xsl:if> 

ここで、式./PF[cond]条件condを満足PFノードを発見します。必要な条件TYPE = 'WE' and CH = 'true'は、そのノードのコンテキストで評価されます。

+0

ありがとうございました!私の日を救った! – multix

関連する問題