如何使用XSL 1.0生成子元素的去重属性列表
用XSL 1.0生成去重排序的水果缩写列表
需要使用XSL 1.0构建转换规则,从给定XML中生成去重的水果列表。需合并两级entities节点(/entities和/entities/entity/entities)下type为fruit的entity元素,提取其abbreviatedText属性,去除重复值并按字母顺序排序,输出为文本格式。受限于必须使用XSL 1.0,优先采用该版本方案。
初始XML示例
<item type="food"> <entities> <entity type="fruit" abbreviatedText="BAN">banana</entity> <entity type="fruit" abbreviatedText="APP">apple</entity> <entity type="fruit" abbreviatedText="ORA">orange</entity> <entity type="fruit" abbreviatedText="LEM">lemon</entity> <entity type="fruit" abbreviatedText="GRA">grape</entity> <entity type="citrus" abbreviatedText="CIT">citrus <entities> <entity type="fruit" abbreviatedText="ORA">orange</entity> <entity type="fruit" abbreviatedText="LEM">lemon</entity> <entity type="fruit" abbreviatedText="LIM">lime</entity> <entity type="fruit" abbreviatedText="MAN">mandarin</entity> </entities> </entity> </entities> </item>
期望输出
去重且按字母排序的abbreviatedText属性列表:APP, BAN, GRA, LEM, LIM, MAN, ORA
更新后的详细XML示例
<?xml version="1.0" encoding="UTF-8"?> <item type="food"> <entities> <entity type="fruit" abbreviatedText="BAN">banana</entity> <entity type="fruit" abbreviatedText="APP">apple</entity> <entity type="fruit" abbreviatedText="ORA">orange</entity> <entity type="fruit" abbreviatedText="LEM">lemon</entity> <entity type="fruit" abbreviatedText="GRA">grape</entity> <entity type="fruit" abbreviatedText="STR">strawberry</entity> <entity type="fruit" abbreviatedText="WTR">water melon</entity> <entity type="other" abbreviatedText="CIT">citrus <entities> <entity type="fruit" abbreviatedText="ORA">orange</entity> <entity type="fruit" abbreviatedText="MAN">mandarin</entity> <entity type="fruit" abbreviatedText="LEM">lemon</entity> </entities> </entity> <entity type="other" abbreviatedText="BRY">berry <entities> <entity type="fruit" abbreviatedText="GRA">grape</entity> <entity type="fruit" abbreviatedText="STR">strawberry</entity> </entities> </entity> <entity type="other" abbreviatedText="MEL">melon <entities> <entity type="fruit" abbreviatedText="WTR">water melon</entity> <entity type="fruit" abbreviatedText="RKM">rock melon</entity> </entities> </entity> </entities> </item>
可用的XSL 1.0代码
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:key name="index_key" match="entity" use="@abbreviatedText" /> <xsl:template match="item"> <xsl:for-each select="entities/entity[@type='fruit'][count(. | key('index_key', @abbreviatedText)[1]) = 1] | entities/entity[@type='other' and (@abbreviatedText='CIT' or @abbreviatedText='BRY')]/entities/entity[count(. | key('index_key', @abbreviatedText)[1]) = 1]"> <xsl:sort select="@abbreviatedText" /> <xsl:value-of select="@abbreviatedText" /> <xsl:text> </xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet>
输出结果
APP BAN GRA LEM MAN ORA STR WTR
该XSL代码可灵活指定需纳入的实体。
内容的提问来源于stack exchange,提问作者tphallett
相关产品推荐
相关产品推荐

