【发布时间】:2022-06-10 18:32:01
【问题描述】:
我需要使用 xsl 3.0 累加器将以下 xml 转换为 预期输出。
输入 XML:
<AggregatedData>
<Data>
<Entry>
<legacyID>ABC</legacyID>
<legacyLocation>Test_Loc1,Test_Loc2</legacyLocation>
<AssociateID>123</AssociateID>
</Entry>
<Entry>
<legacyID>ABC</legacyID>
<legacyLocation>Test_Loc3</legacyLocation>
<AssociateID>123</AssociateID>
</Entry>
<Entry>
<legacyID>CDE</legacyID>
<legacyLocation>Test_Loc4,Test_Loc5</legacyLocation>
<AssociateID>456</AssociateID>
</Entry>
</Data>
<root>
<row>
<legacyID>ABC</legacyID>
<legacyLocation>Test_Loc1</legacyLocation>
<company>Test Company 1</company>
<firstname>Test1</firstname>
</row>
<row>
<legacyID>CDE</legacyID>
<legacyLocation>Test_Loc5</legacyLocation>
<company>Test Company 2</company>
<firstname>Test2</firstname>
</row>
</root>
</AggregatedData>
<Data> 下的值可以包含<legacyLocation> 的逗号分隔值,<root> 下的值仅包含一个<legacyLocation> 的值。我需要映射这些值并将输出作为下面的预期输出。有没有办法使用 XSLT 3.0 累加器同时使用 legacyID 和 legacyLocation 来映射值?
预期输出:
<root>
<worker>
<row>
<AssociateID>123</AssociateID>
<legacyID>ABC</legacyID>
<legacyLocation>Test_Loc1</legacyLocation>
<company>Test Company 1</company>
<firstname>Test1</firstname>
</row>
<row>
<AssociateID>456</AssociateID>
<legacyID>CDE</legacyID>
<legacyLocation>Test_Loc5</legacyLocation>
<company>Test Company 2</company>
<firstname>Test2</firstname>
</row>
</worker>
</root>
【问题讨论】:
-
你试过什么?为什么需要使用累加器而不是键?
-
@MartinHonnen 以前的要求是仅使用 legacyID 进行映射,但就示例而言,它不是唯一值。映射速度是使用累加器的原因。因为有将近 4000 多条记录。
-
CDE Test_Loc4,Test_Loc5,Test_Loc6 456
AggregatedData> 当我们尝试匹配 legacyLocation 节点的第一个值时,代码按预期工作。但是当我们需要匹配行数据和条目数据之间的“Test_Loc5”(中间值)时,它没有选择确切的关联 ID。@马丁霍南CDE Test_Loc5 Test Company 2 Test2
标签: xml xslt xslt-3.0 accumulator