2016-07-04 19 views
0

bpelでは、XSLTを使用して変換を実装しています。以下に、2つのソースXMLファイルと目的のターゲットを示します。私は、第一段階としてターゲットにsource2をコピーするアイデンティティマッチテンプレートを適用しました。どのマッチテンプレートでも希望の出力を得ることができません。ソース1(ルックアップ)は、XSLTの$lookupとしてアクセスできます。xsltテンプレートを使用して検索できません一致

ソース1(ルックアップする):

<Lookup> 
<values> 
     <val>1</val> 
     <val>2</val> 
</values> 
</Lookup> 

ソース2(プライマリ)

<req> 
<ref> 
    <id>True</id> 
    <val>1</val> 
</ref> 
<ref> 
    <id>True</id> 
    <val>2</val> 
</ref> 
<ref> 
    <id>True</id> 
    <val>1234</val> 
</ref> 
</req> 

ターゲット

<req> 
<ref> 
    <id>False</id> 
    <val>1</val> 
</ref> 
<ref> 
    <id>False</id> 
    <val>2</val> 
</ref> 
<ref> 
    <id>True</id> 
    <val>1234</val> 
</ref> 
</req> 

検索がXSLTで$lookupとしてアクセスすることができます。 ソース(プライマリ)からターゲットにコピーするためにXSLTアイデンティティテンプレートを使用しましたが、テンプレートマッチの残りのマッチパターンでブレークスルーできません。

+0

は、BPELのサポートXSLTをい使用できるキーを使用していないXSLT 1.0で

2.0? –

+0

ここで適用する必要がある*ロジック*を説明してください。 –

+0

条件を除いて、ターゲットであるとして、ソースとルックアップ試合で、対応するは、それが一致していないtarget.if、私は真のままにすべきだろうの値をfalseに設定する必要があります場合、私はソース2を必要とします –

答えて

0

あなたは恒等変換テンプレートと一緒に

<xsl:key name="ref" match="Lookup/values/val" use="."/> 

、その後

<xsl:template match="ref[key('ref', val, $lookup)]/id"> 
    <id>False</id> 
</xsl:template> 

を使用することができますXSLT 2.0を使用します。あなたはマッチパターンで変数を使用することはできませんとkey機能はコンテキストを変更するには、その引数を持っていないので、あなたは

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

    <xsl:param name="lookup" select="document('source1.xml')"/> 

    <xsl:template match="@* | node()" name="identity"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="ref/id"> 
     <xsl:choose> 
      <xsl:when test="../val = $lookup//val"> 
       <id>False</id> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:call-template name="identity"/> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 

</xsl:stylesheet> 
関連する問題