如何复制xml元素
我必须根据特定的id(例如userid)将xml有效负载复制到尽可能多的xml有效负载中
<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> 这可能吗 更新:下面给出的答案工作正常,但我没有提到一个小问题.如果用户标识相同且重复,则应显示相同的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])] 在模板级别它也无法正常工作 我错过了什么吗? 更新: 修改前(作为答案给我) 我的错误是使用ns2:userid而不是“.” 完整的xsl代码
请验证它.这也对我有用…… 解决方法
假设的XML:
<ns2:Details xmlns:ns2="ns2"> <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:UserId>46</ns2:UserId> </ns2:Details> XSLT: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns2="ns2" > <xsl:output method="xml" indent="yes"/> <xsl:key name="k" match="ns2:UserId" use="text()"/> <xsl:template match="/"> <root> <xsl:apply-templates select="//ns2:Details/ns2:UserId[not(node() = preceding-sibling::node())]"/> </root> </xsl:template> <xsl:template match="//ns2:Details"> <xsl:param name="userId" select="ns2:UserId"/> <ns2:Details> <xsl:copy-of select="key('k',$userId)[not(node() = preceding-sibling::node())]"/> <xsl:copy-of select="./*[name() != 'ns2:UserId']"/> </ns2:Details> </xsl:template> <xsl:template match="ns2:UserId"> <xsl:apply-templates select=".."> <xsl:with-param name="userId" select="."/> </xsl:apply-templates> </xsl:template> </xsl:stylesheet> 输出XML: <?xml version="1.0" encoding="utf-8"?> <root xmlns:ns2="ns2"> <ns2:Details> <ns2:UserId>46</ns2:UserId> <ns2:var1>AA0511201143</ns2:var1> <ns2:var2>PARCEL</ns2:var2> <ns2:var3>04/04/2011</ns2:var3> <ns2:var4>Organization</ns2:var4> </ns2:Details> <ns2:Details> <ns2:UserId>237</ns2:UserId> <ns2:var1>AA0511201143</ns2:var1> <ns2:var2>PARCEL</ns2:var2> <ns2:var3>04/04/2011</ns2:var3> <ns2:var4>Organization</ns2:var4> </ns2:Details> </root> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |