【发布时间】:2011-10-03 15:29:20
【问题描述】:
我必须根据特定的 id 将 xml 有效负载复制到尽可能多的 xml 有效负载中,例如用户 ID
<ns2:Details xmlns:ns2="ns">
<ns2:var1>AA0511201143</ns2:var1>
<ns2:var2>PARCEL</ns2:var2>
<ns2:var3>04/04/2011</ns2:var3>
<ns2:var4>Organization</ns2:var4>
<ns2:UserId>46</ns2:UserId>
<ns2:UserId>237</ns2:UserId>
</ns2:Details>
我需要输出为
<ns2:Details>
<ns2:var1>AA0511201143</ns2:var1>
<ns2:var2>PARCEL</ns2:var2>
<ns2:var3>04/04/2011</ns2:var3>
<ns2:var4>Organization</ns2:var4>
<ns2:UserId>46</ns2:UserId>
</ns2:Details>
<ns2:Details>
<ns2:var1>AA0511201143</ns2:var1>
<ns2:var2>PARCEL</ns2:var2>
<ns2:var3>04/04/2011</ns2:var3>
<ns2:var4>Organization</ns2:var4>
<ns2:UserId>237</ns2:UserId>
</ns2:Details>
这可能吗
更新:以下给出的答案运行良好,但有一个小问题我没有提及。如果用户 ID 相同且重复,则应显示相同的 xml 有效负载。为此,我尝试了以下方法来获取 userid 的独特元素
<xsl:param name="userId" select="ns0:UserId[generate-id(.)=generate-id(key('k', ns0:UserId)[1])]"/>
但这不起作用,也尝试使用上面的
..[generate-id(.)=generate-id(key('k', ns0:UserId)[1])]
在模板级别也不起作用
我错过了什么吗?
更新: 我对上面的代码做了一个小的修改,而不是在 xsl:param 工作,我在 xsl:apply-template 使用它
修改前(作为回答我提供)
我的错误是我使用 ns2:userid 而不是“。”
完整的 xsl 代码 ---
请确认。这也对我有用...
【问题讨论】:
-
您的输入和期望的输出格式不正确。我假设“
Organization”应该是“ Organization ”? -
+1 很好的问题。不太了解您的更新。你想重复
UserId生成其他Details吗?我的回答对你有用吗? -
好的,我明白了,更新了我的答案以删除重复项。
-
好问题,+1。到目前为止,请参阅我对最短(行数、模板数)和最简单(无模式、无
xsl:for-each、无参数)解决方案的回答。 :) 此外,还提供了解决方案中关键时刻的简要说明。 -
@anvv,我更新了我的答案以删除冗余节点。