xml – XSLT删除重复项
发布时间:2020-12-16 23:19:45 所属栏目:百科 来源:网络整理
导读:我有一个xml数据源,如下所示: dsQueryResponse Department Rows Row dept="HR" state="NY" region="East"/ Row dept="HR" state="NJ" region="East"/ Row dept="SD" state="NY" region="East"/ Row dept="MM" state="NY" region="East"/ Row dept="SD" stat
我有一个xml数据源,如下所示:
<dsQueryResponse> <Department> <Rows> <Row dept="HR" state="NY" region="East"/> <Row dept="HR" state="NJ" region="East"/> <Row dept="SD" state="NY" region="East"/> <Row dept="MM" state="NY" region="East"/> <Row dept="SD" state="NJ" region="East"/> <Row dept="SD" state="CO" region="West"/> <Row dept="MM" state="CO" region="West"/> </Rows> </Department> </dsQueryResponse> 我的XSLT看起来像这样: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> <xsl:output method="html" indent="no"/> <xsl:decimal-format NaN=""/> <xsl:param name="DeptQS">East</xsl:param> <xsl:variable name="deptRows" select="/dsQueryResponse/Department/Rows/Row[@region = $DeptQS]"/> <xsl:template match="/"> <xsl:if test="count($deptRows) > 0"> <xsl:call-template name="deptList"/> </xsl:if> </xsl:template> <xsl:template name="deptList"> <xsl:for-each select="$deptRows"> <!-- process unique depts--> </xsl:for-each> </xsl:template> </xsl:stylesheet> 我希望将该地区的所有部门都写出来.我现在的代码将写出重复的部门.但是我怎么能只为该地区的部门写一次呢? 谢谢! 解决方法
对于XSLT 1.0,您可以使用“
Muenchian Method”.
您将创建一个键,通过@region和@dept值的组合来索引Row元素. 然后,您将获得该区域/部门组合的第一次出现(具有所需区域($DeptQS))并输出部门(部门). 这是一个示例样式表输出< test>显示上下文的元素: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes" method="xml" omit-xml-declaration="yes"/> <xsl:strip-space elements="*"/> <xsl:key name="kDept" match="Department/Rows/Row" use="concat(@region,'|',@dept)"/> <xsl:param name="DeptQS">East</xsl:param> <xsl:template match="/*"> <xsl:for-each select="Department/Rows/Row[count(.|key('kDept',concat($DeptQS,@dept))[1])=1]"> <test>Current dept: <xsl:value-of select="@dept"/></test> </xsl:for-each> </xsl:template> </xsl:stylesheet> 这是使用输入XML的输出: <test>Current dept: HR</test> <test>Current dept: SD</test> <test>Current dept: MM</test> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |