<pre><getPolicystatus>
<agentno>001</agentno>
<policynumber>1</policynumber><req><req1>age</req1><status>success</status></req><req><req1>test</req1><status>failure</status></req><req><req1>health</req1><status>success</status></req></policyresult>
<policyresult><agentno>001</agentno>
<policynumber>1</policynumber><req><req1>age</req1><status>success</status></req><req><req1>test</req1><status>failure</status></req><req><req1>health</req1><status>success</status></req></policyresult>
<policyresult><agentno>002</agentno>
<policynumber>1</policynumber><req><req1>age</req1><status>success</status></req><req><req1>test</req1><status>failure</status></req><req><req1>health</req1><status>success</status></req></policyresult></getPolicystatus>
</pre>
我有类似上面的XML。我需要显示如下输出 根据代理人数量。如果重复代理人号码,我们需要跳过该号码。
001
1agesuccesstestfailurehealthsuccess
1agesuccesstestfailurehealthsuccess
002
1agesuccesstestfailurehealthsuccess
答案 0 :(得分:0)
假设(a)在示例XML的第一行末尾缺少policyresult的start-tag,以及(b)您在XSLT 1.0中想要处理每个策略结果的意思是什么agentno子元素与其前一个兄弟的agentno子元素不同的元素,那么最简单的方法是为policyresult写两个模板。
将处理应显示元素的情况:
<xsl:template match="policyresult">
<!--* contents left as exercise for the reader ... *-->
</xsl:template>
另一个将处理应该抑制元素的情况:
<xsl:template match="policyresult
[agentno = ../preceding-sibling::policyresult[1]/agentno]"/>
如果另一方面(b')如果其agentno匹配任何前面的代理编号,而不仅仅是前面的policyresult元素中的那个,则应该抑制policyresult,然后禁止{{1}在第二个匹配模式中。
[附录
这两个模板以及您编写的其他模板将在您正在编写的XSL样式表中一起使用,因此您将拥有或多或少类似于以下内容的内容:
[1]
如果您刚刚开始使用XSLT,我强烈建议您获得一个很好的教程介绍并完成它。 XSLT与其他编程语言不同,只是虚张声势,不太可能带来愉快的结果。