-1
<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
4

1 回答 1

0

假设 (a) 在示例 XML 的第一行末尾缺少 policyresult 的开始标记,并且 (b) 您的意思是您希望在 XSLT 1.0 中处理其 agentno 的每个 policyresult 元素child 与其前一个兄弟的 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') policyresult 应该被抑制,如果它的 agentno 匹配任何前面的代理编号,而不仅仅是前一个 policyresult 元素中的那个,那么[1]在第二个匹配模式中抑制 。

[附录]

这两个模板,连同您编写的其他模板,将一起进入您正在编写的 XSL 样式表中,因此您将拥有或多或少类似于以下内容的内容:

  <xsl:output method="text"/>

  <xsl:template match="policyresult">
    <xsl:text>&#xA;&#xA;</xsl:text>
    <xsl:value-of select="agentno"/>
    <xsl:text>&#xA;&#xA;&#xA;</xsl:text>
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="policyresult
  [agentno = preceding-sibling::policyresult[1]/agentno]">
    <xsl:message>Suppressing duplicate policyresult ...</xsl:message>
  </xsl:template>

  <xsl:template match="agentno"/>
  <xsl:template match="text()[not(normalize-space())]"/>

</xsl:stylesheet>

如果您刚刚开始使用 XSLT,我强烈建议您获得一个很好的教程介绍并完成它。XSLT 与其他编程语言有很大的不同,只是虚张声势不太可能带来令人满意的结果。

于 2013-02-03T20:52:16.440 回答