2011-01-24 9 views
2

BoxとCakesの間に親子関係を持つ次のソースデータがあるとします。Biztalkマップに子を持たない親レコードを削除するにはどうすればよいですか?

<Box id = 1> 
    <Cakes> 
    <Cake id =1> 
      <some other tags ...> 
    </Cake> 
    <Cake id =2> 
      <some other tags ...> 
    </Cake> 
    </Cakes> 
</Box> 
<Box id = 2>  
    <Cakes/> 
</Box> 

目標は、ケーキの要素をマッピングする能力を維持しながら適切に、先に(例えば、ボックス2など)がケーキを含まないボックスを除去することであり、彼らの子供たちが(そうすることなくグラフィカルマッパーに適切にタグそれを防ぐための生のXSLT式を使用して)。

Functoidを使用してこれを行うには良い方法がありますか?または、他の何か?

答えて

2

Boxの最初のCake子のid属性が空の文字列を返すかどうかをテストできます。


あなたは次のFunctoid使用して所望の変換を得る:

1)繰り返しのFunctoidを挿入し、Boxノード

2に接続)インデックスのFunctoidを挿入してのid属性に接続しますCakeノード

3)connect インデックス Functoidの反復 Functoidの(出力側)

4)等しくない functiod入力を構成等しくない Functoidのを挿入しインデックス Functoidの(出力側)

5)に接続します。定数空文字列

6)Boxノード

7)を挿入し、メッセージを値マッピング Functoidの

8を標的とする等しくない出力を接続)等しくない出力する値マッピングに接続を追加入力側

9)connect idソースメッセージの属性Boxノード値のマッピング入力

10)値マッピング出力ターゲットメッセージの属性Boxノードidに接続


私は今のスクリーンショットを提供することはできません申し訳ありません。あなたが私の説明から理解できることを願っています。

+0

ありがとうございます、うまく動作します!まさに私が探していたもの。 – TheOwlsAreNotWhatTheySeem

2

それがマッピングに来るとき、私は少し次元の一人ですが、私たちは常に私たちのXSLTのプロトタイプを作成するためにマッパーを使用して、カスタムXSLTスタイルシートを使用してマップを切り替える

は、これらのSOポストHerehere上を参照してください。

あなたのXSLTは、これは私が

を使用するXMLた

<?xml version="1.0" encoding="utf-16"?> 
<xsl:stylesheet 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
     xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" 
     exclude-result-prefixes="msxsl var userCSharp" 
     version="1.0" 
     xmlns:userCSharp="http://schemas.microsoft.com/BizTalk/2003/userCSharp"> 

    <xsl:output 
     omit-xml-declaration="no" 
     method="xml" 
     version="1.0" 
     encoding="UTF-8" /> 

    <xsl:template match="/"> 
     <xsl:apply-templates select="Boxes" /> 
    </xsl:template> 
    <xsl:template match="Boxes"> 
     <MappedBoxes> 
      <xsl:for-each select="Box[count(Cakes/Cake) > 0]"> 
       <MappedBox> 
        <MappedCakes> 
         <xsl:for-each select="Cakes/Cake"> 
          <MappedCake> 
           <xsl:value-of select="Tag/text()" /> 
          </MappedCake> 
         </xsl:for-each> 
        </MappedCakes> 
       </MappedBox> 
      </xsl:for-each> 
     </MappedBoxes> 
    </xsl:template> 
</xsl:stylesheet> 

のようになります。XSLTのマップを変換する方法
<Boxes> 
    <Box id = "1"> 
     <Cakes> 
      <Cake id ="1"> 
       <Tag>FirstCake</Tag> 
      </Cake> 
      <Cake id ="2"> 
       <Tag>SecondCake</Tag> 
      </Cake> 
     </Cakes> 
    </Box> 
    <Box id = "2"> 
     <Cakes/> 
    </Box> 
    <Box id = "3"> 
    </Box> 
    <Box id = "4"> 
     <Cakes> 
      <Cake id ="4"> 
       <Tag>FourthCake</Tag> 
      </Cake> 
      <Cake id ="5"> 
       <Tag>FifthCake</Tag> 
      </Cake> 
     </Cakes> 
    </Box> 
</Boxes> 
+0

ありがとうございますが、私はビジュアルマッピングをたくさん行っています(<いくつかの他のタグ...>部分は実際には非常に複雑で深みがあり、すでにすべてビジュアルマッパーでテスト済みです)。したがって、このようなカスタムXSLTをこのように使用することはできません。私は、ビジュアルのビジュアルマッパーの機能を使用したソリューションが必要です。 – TheOwlsAreNotWhatTheySeem

+0

あなたの* .btm.csファイルのソースを見て、VSがあなたのビジュアルマップで何をするかを見てください;) – StuartLC

+0

私は考えていますが、それはちょっとBiztalkを使用する目的を破っていますか?私がカスタムXSLTを書こうと思っているのであれば、私の.NETアプリで直接行うことができます...そしてその解決策は、それほど深く技術的ではない人に読める/保守可能である必要があります。 – TheOwlsAreNotWhatTheySeem

関連する問題