2016-03-03 36 views
2

源文件在字段name中具有標識值。Biztalk映射中的多次啓動迭代器functoid

<?xml version="1.0"?> 
<root> 
    <line> 
     <name>Test1</name> 
     <data>data1</data> 
    </line> 
    <line> 
     <name>Test1</name> 
     <data>data2</data> 
    </line> 
    <line> 
     <name>Test2</name> 
     <data>data3</data> 
    </line> 
    <line> 
     <name>Test1</name> 
     <data>data4</data> 
    </line> 
</root> 

如果我用在直路的迭代functoid的,我得到這樣的結果:

Biztalk Mapping

<?xml version="1.0"?> 
<root> 
    <line> 
     <sequence>1</sequence> 
     <name>Test1</name> 
     <data>data1</data> 
    </line> 
    <line> 
     <sequence>2</sequence> 
     <name>Test1</name> 
     <data>data2</data> 
    </line> 
    <line> 
     <sequence>3</sequence> 
     <name>Test2</name> 
     <data>data3</data> 
    </line> 
    <line> 
     <sequence>4</sequence> 
     <name>Test1</name> 
     <data>data4</data> 
    </line> 
</root> 

我如何填寫序列字段,如果從1開始,每name中的新值,並且如果它滿足任何發生的值,則繼續從最後一個值開始的序列? 我在輸出文件預計這樣的結果:

<?xml version="1.0"?> 
<root> 
    <line> 
     <sequence>1</sequence> 
     <name>Test1</name> 
     <data>data1</data> 
    </line> 
    <line> 
     <sequence>2</sequence> 
     <name>Test1</name> 
     <data>data2</data> 
    </line> 
    <line> 
     <sequence>1</sequence> 
     <name>Test2</name> 
     <data>data3</data> 
    </line> 
    <line> 
     <sequence>3</sequence> 
     <name>Test1</name> 
     <data>data4</data> 
    </line> 
</root> 

回答

1

迭代器的functoid獲得當前節點的迭代 - 它不會在文字看起來都沒有。爲了實現你想要做的事情,使用C#腳本函數functoid(它可以代替你當前的迭代器functoid)和一個Dictionary<string, int>來跟蹤你看過某個特定名字的次數可能是最簡單的。這將是functoid的內容:

System.Collections.Generic.Dictionary<string, int> tracker = new System.Collections.Generic.Dictionary<string, int>(); 

public string GetNameCount(string name) 
{ 
    int ct; 
    if (tracker.TryGetValue(name, out ct)) 
    { 
     ct++; 
     tracker[name] = ct; 
     return ct.ToString(); 
    } 
    else 
    { 
     tracker.Add(name, 1); 
     return "1"; 
    } 
} 

可能是一個好主意,把它放在一個外部組件,如果你在一個以上的地圖使用它(或者只是用於調試/維護目的)。

在純粹的XSLT中這樣做會需要某種分組/計數,這可能效率會低得多。

+0

謝謝。有用! –