从xsl中排除结果

时间:2017-06-24 17:20:25

标签: xml xslt syntax

此代码来自我发送的补充xsl,当我告诉我的客户端配置文件错误地排除"北爱尔兰"在标题中。现在,他把它全部带回来,但我需要排除一些结果 - 如下所示。

我想要过滤掉结果的对象的识别信息是 affectURI 中的 nisr ,最后发布的xml中的密钥-33793274a92a1f194b3ebcfccfc08927。

我怎样才能摆脱这些' nisr'结果

<xsl:template match="atom:feed" mode="results">
    <xsl:apply-templates select="atom:entry/ukm:Effect"/>
</xsl:template>
<xsl:template match="ukm:Effect">
    <xsl:choose>
        <xsl:when test="@Type= 'Commencement Order' and @AffectedProvisions='specified amended provision(s)'"/>
        <xsl:when test="contains(ukm:AffectingTitle[1], 'Northern Ireland')"/>
        <xsl:when test="contains(ukm:AffectingTitle[1], 'Northern-Ireland')"/>
        <xsl:when test="contains(ukm:AffectedTitle[1], 'Northern Ireland')"/>
        <xsl:when test="contains(ukm:AffectedTitle[1], 'Northern-Ireland')"/>
        <xsl:when test="@Type= 'coming into force'"/>
        <xsl:otherwise>
            <tr xsl:exclude-result-prefixes="atom xs xhtml tso db sls ukm">
                <xsl:apply-templates select="." mode="resultsAffectedYearNumber"/>
                <xsl:apply-templates select="." mode="resultsAffectedTitle"/>
                <xsl:apply-templates select="." mode="resultsChangedProvision"/>
                <xsl:apply-templates select="." mode="resultsAffectingTitle"/>
                <xsl:apply-templates select="." mode="resultsInForceDates"/>
                <xsl:apply-templates select="." mode="resultsEffectId"/>
            </tr>
        </xsl:otherwise>
    </xsl:choose>

这是来源。

-I&#39; d希望对&#34; key-33793274a92a1f194b3ebcfccfc08927&#34;在我的结果中,因为它包含NISR。

- 如果你可以帮助我排除NISR,我将采用相同的逻辑并将其应用于&#34; key-e789d8aa9e46169ba1f49655051c66d1&#34;因为NIA也在影响URI是我需要省略的六个句柄之一

- 英国pga(英国公众和一般法案,对于那些喜欢知道他们正在看什么的人!)结果(&#34; key-fce2f92caeab329b0d33dfb1adca9bdf&#34;)将被包括在内。我在替换配置之前的起点是缺少这个,因为它在标题中有北爱尔兰,而在某些我无法识别的地方,这被错误地排除了。作者应该只排除NIA,NISR,NISI。

<entry>
                            <id>http://www.legislation.gov.uk/changes/affected/ukpga/1972/18/affecting/nisr/2016/387/modified/2017-01-19T15:31:27Z</id>
                            <title>The Justice (2015 Act) (Commencement No. 7 and Saving Provisions) Order (Northern Ireland) 2016 effect on Maintenance Orders (Reciprocal Enforcement) Act 1972</title>
                            <updated>2017-01-19T15:31:27Z</updated>
                            <author><name/></author>
                            <ukm:Effect EffectId="key-33793274a92a1f194b3ebcfccfc08927" AffectedClass="UnitedKingdomPublicGeneralAct" AffectedURI="http://www.legislation.gov.uk/id/ukpga/1972/18" AffectingURI="http://www.legislation.gov.uk/id/nisr/2016/387" AffectingClass="NorthernIrelandStatutoryRule" URI="http://www.legislation.gov.uk/id/effect/key-33793274a92a1f194b3ebcfccfc08927" Row="70" Type="Commencement Order" Applied="false" RequiresApplied="true" AffectedProvisions="specified amended provision(s)" Notes="commencement order for 2015 c. 9 (N.I.)" AffectingYear="2016" AffectingNumber="387" AffectingProvisions="art. 2" AffectedYear="1972" AffectedNumber="18" Modified="2017-01-19T15:31:27Z"><ukm:AffectedTitle>Maintenance Orders (Reciprocal Enforcement) Act 1972</ukm:AffectedTitle><ukm:AffectedProvisions>specified amended provision(s)</ukm:AffectedProvisions><ukm:AffectingTitle>The Justice (2015 Act) (Commencement No. 7 and Saving Provisions) Order (Northern Ireland) 2016</ukm:AffectingTitle><ukm:AffectingProvisions><ukm:Section Ref="article-2" URI="http://www.legislation.gov.uk/id/nisr/2016/387/article/2">art. 2</ukm:Section></ukm:AffectingProvisions><ukm:Commenced>commencement order for <ukm:Citation Class="NorthernIrelandAct" URI="http://www.legislation.gov.uk/id/nia/2015/9" Year="2015" Number="9" Title="Justice Act (Northern Ireland) 2015">2015 c. 9 (N.I.)</ukm:Citation></ukm:Commenced><ukm:InForceDates><ukm:InForce Applied="false" Prospective="true" Qualification=""/></ukm:InForceDates></ukm:Effect>
                        </entry><entry>
                            <id>http://www.legislation.gov.uk/changes/affected/ukpga/1973/36/affecting/nia/2016/4/modified/2016-03-25T09:47:14Z</id>
                            <title>Public Services Ombudsman Act (Northern Ireland) 2016 effect on Northern Ireland Constitution Act 1973</title>
                            <updated>2016-03-25T09:47:14Z</updated>
                            <author><name/></author>
                            <ukm:Effect EffectId="key-e789d8aa9e46169ba1f49655051c66d1" AffectedURI="http://www.legislation.gov.uk/id/ukpga/1973/36" AffectedClass="UnitedKingdomPublicGeneralAct" AffectingURI="http://www.legislation.gov.uk/id/nia/2016/4" AffectingClass="NorthernIrelandAct" URI="http://www.legislation.gov.uk/id/effect/nia-2016-4-4ds9a6o2-90" Row="90" Type="repealed" Applied="false" RequiresApplied="true" AffectedProvisions="s. 36(1)(a)(b)" AffectingEffectsExtent="NI" AffectingYear="2016" AffectingNumber="4" AffectingProvisions="Sch. 9" AffectedYear="1973" AffectedNumber="36" Created="2016-03-25T09:47:14Z" Modified="2016-03-25T09:47:14Z"><ukm:AffectedTitle>Northern Ireland Constitution Act 1973</ukm:AffectedTitle><ukm:AffectedProvisions><ukm:Section Ref="section-36-1-a" URI="http://www.legislation.gov.uk/id/ukpga/1973/36/section/36/1/a">s. 36(1)(a)</ukm:Section><ukm:Section Ref="section-36-1-b" URI="http://www.legislation.gov.uk/id/ukpga/1973/36/section/36/1/b">(b)</ukm:Section></ukm:AffectedProvisions><ukm:AffectingTitle>Public Services Ombudsman Act (Northern Ireland) 2016</ukm:AffectingTitle><ukm:AffectingTitle>Public Services Ombudsman Act (Northern Ireland) 2016</ukm:AffectingTitle><ukm:AffectingProvisions><ukm:Section Ref="schedule-9" URI="http://www.legislation.gov.uk/id/nia/2016/4/schedule/9">Sch. 9</ukm:Section></ukm:AffectingProvisions><ukm:CommencementAuthority><ukm:Section Ref="section-64" URI="http://www.legislation.gov.uk/id/nia/2016/4/section/64">s. 64</ukm:Section></ukm:CommencementAuthority><ukm:InForceDates><ukm:InForce Applied="false" Date="2016-04-01" Qualification="wholly in force"/></ukm:InForceDates></ukm:Effect>
                        </entry><entry>
                            <id>http://www.legislation.gov.uk/changes/affected/ukpga/1974/37/affecting/ukpga/2016/25/modified/2017-04-10T10:13:36Z</id>
                            <title>Investigatory Powers Act 2016 effect on Health and Safety at Work etc. Act 1974</title>
                            <updated>2017-04-10T10:13:36Z</updated>
                            <author><name/></author>
                            <ukm:Effect EffectId="key-fce2f92caeab329b0d33dfb1adca9bdf" AffectedClass="UnitedKingdomPublicGeneralAct" AffectedURI="http://www.legislation.gov.uk/id/ukpga/1974/37" AffectingURI="http://www.legislation.gov.uk/id/ukpga/2016/25" AffectingClass="UnitedKingdomPublicGeneralAct" URI="http://www.legislation.gov.uk/id/effect/key-fce2f92caeab329b0d33dfb1adca9bdf" Row="10" Type="inserted" Applied="false" RequiresApplied="true" AffectedProvisions="s. 20(9)(10)" AffectingEffectsExtent="E+W+S+N.I." AffectingYear="2016" AffectingNumber="25" AffectingProvisions="Sch. 2 para. 1" AffectedYear="1974" AffectedNumber="37" Modified="2017-04-10T10:13:36Z"><ukm:AffectedTitle>Health and Safety at Work etc. Act 1974</ukm:AffectedTitle><ukm:AffectedProvisions><ukm:Section Ref="section-20-9" URI="http://www.legislation.gov.uk/id/ukpga/1974/37/section/20/9" FoundRef="section-20">s. 20(9)</ukm:Section><ukm:Section Ref="section-20-10" URI="http://www.legislation.gov.uk/id/ukpga/1974/37/section/20/10" FoundRef="section-20">(10)</ukm:Section></ukm:AffectedProvisions><ukm:AffectingTitle>Investigatory Powers Act 2016</ukm:AffectingTitle><ukm:AffectingTitle>Further Education) Order (Northern Ireland) 2016</ukm:AffectingTitle><ukm:AffectingProvisions><ukm:Section Ref="schedule-2" URI="http://www.legislation.gov.uk/id/ukpga/2016/25/schedule/2">Sch. 2 </ukm:Section><ukm:Section Ref="schedule-2-paragraph-1" URI="http://www.legislation.gov.uk/id/ukpga/2016/25/schedule/2/paragraph/1">para. 1</ukm:Section></ukm:AffectingProvisions><ukm:Savings><ukm:Section Ref="schedule-9" URI="http://www.legislation.gov.uk/id/ukpga/2016/25/schedule/9">Sch. 9 </ukm:Section><ukm:Section Ref="schedule-9-paragraph-7" URI="http://www.legislation.gov.uk/id/ukpga/2016/25/schedule/9/paragraph/7">paras. 7</ukm:Section> <ukm:Section Ref="schedule-9-paragraph-8" URI="http://www.legislation.gov.uk/id/ukpga/2016/25/schedule/9/paragraph/8">8</ukm:Section> <ukm:Section Ref="schedule-9-paragraph-10" URI="http://www.legislation.gov.uk/id/ukpga/2016/25/schedule/9/paragraph/10">10</ukm:Section></ukm:Savings><ukm:CommencementAuthority><ukm:Section Ref="section-272-1" URI="http://www.legislation.gov.uk/id/ukpga/2016/25/section/272/1">s. 272(1)</ukm:Section></ukm:CommencementAuthority><ukm:InForceDates><ukm:InForce Applied="false" Prospective="true" Qualification=""/></ukm:InForceDates></ukm:Effect>
                        </entry>

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解这个问题,但当你说“我想过滤掉结果是nisr里面影响URI”时,解决这个问题的一种方法是利用模板匹配排除事物。

您目前有一个匹配ukm:Effect的模板,该模板匹配所有此类命名元素

<xsl:template match="ukm:Effect">

如果你有一条规则要排除ukm:Effect元素,而nisr在insideURI里面,你应该添加另一个模板

<xsl:template match="ukm:Effect[contains(@AffectingURI, '/nisr/')]" />

由于此模板在元素名称之后具有条件,因此它将具有与另一个模板相比更高的优先级,从而导致该ukm:Effect元素被排除。

所以,不要让xsl:choose / xsl:when排除元素......

<xsl:when test="contains(ukm:AffectingTitle[1], 'Northern Ireland')"/>

您可以将其重写为模板匹配以将其排除

<xsl:template match="ukm:Effect[contains(ukm:AffectingTitle[1], 'Northern Ireland')]"/>

要小心,匹配ukm:Effect[contains(ukm:AffectingTitle[1], 'Northern Ireland')]的模板与匹配ukm:Effect[contains(@AffectingURI, '/nisr')]的模板具有相同的优先级(因为两者都有条件)。如果两个模板可以匹配具有相同优先级的相同元素,则会被视为错误。在这种情况下,您可能需要在第二个模板上粘贴priority属性

<xsl:template match="ukm:Effect[contains(@AffectingURI, '/nisr')]" priority="2" />

或者,您可以使用一个大型条件检查的模板

<xsl:template match="ukm:Effect[contains(@AffectingURI, '/nisr/') or contains(ukm:AffectingTitle[1], 'Northern Ireland')]"/>