如何比较xslt 1.1中的先前节点值?

时间:2013-02-03 17:40:11

标签: xslt-1.0

<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

1 个答案:

答案 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与其他编程语言不同,只是虚张声势,不太可能带来愉快的结果。