检查 XSLT 中是否存在特定子元素
Check for existence of specific child element in XSLT
我正在使用 XSLT 生成一个 table,其中包含 XML 中每个 ejerlejlighed
标签的一行(见下文)。
路径:forandringer->ejerlejlighed->ejerlejlighed
每个 ejerlejlighed
标签包含一系列信息,这些信息应以列的形式显示,其中一个标签是可选的:anvendelse
.
问题:
我的客户要求仅当至少一个 ejerlejlighed
-标签包含此信息时才显示 anvendelse
-标签的列。
andringer->ejerlejligheder->ejerlejlighed->anvendelse 的路径
<forandringer>
<aendrings>
<changesOrder>1</changesOrder>
<sagsoperationKode>EOPEF</sagsoperationKode>
<sagsoperationBetegnelse>Oprettelse af ejerlejlighedsfællesskab</sagsoperationBetegnelse>
<hovedejendomBFEnr>3330122</hovedejendomBFEnr>
<hovedejendomType>SFE</hovedejendomType>
</aendrings>
<aendrings>
<changesOrder>2</changesOrder>
<sagsoperationKode>ENOPAH</sagsoperationKode>
<sagsoperationBetegnelse>Anden hjemmel*</sagsoperationBetegnelse>
<hovedejendomBFEnr>3330122</hovedejendomBFEnr>
<hovedejendomType>SFE</hovedejendomType>
<aktuelBFEnr>100229741</aktuelBFEnr>
<aktuelEJLnr>1</aktuelEJLnr>
<kommentar>§18</kommentar>
</aendrings>
<ejerlejligheder>
<mainPropertyBFENumber>3330122</mainPropertyBFENumber>
<ejerlejlighed>
<BFENumber>100229741</BFENumber>
<ejerlejlighedNr>1</ejerlejlighedNr>
<adresse>Ukendt adresse</adresse>
<areal>100</areal>
<fordelingstal>25/100</fordelingstal>
</ejerlejlighed>
<ejerlejlighed>
<BFENumber>100229742</BFENumber>
<ejerlejlighedNr>2</ejerlejlighedNr>
<adresse>Ukendt adresse</adresse>
<anvendelse>Erhverv</anvendelse>
<areal>200</areal>
<fordelingstal>25/100</fordelingstal>
</ejerlejlighed>
<ejerlejlighed>
<BFENumber>100229743</BFENumber>
<ejerlejlighedNr>3</ejerlejlighedNr>
<adresse>Ukendt adresse</adresse>
<areal>200</areal>
<fordelingstal>25/100</fordelingstal>
</ejerlejlighed>
<ejerlejlighed>
<BFENumber>100229744</BFENumber>
<ejerlejlighedNr>4</ejerlejlighedNr>
<adresse>Ukendt adresse</adresse>
<areal>200</areal>
<fordelingstal>25/100</fordelingstal>
</ejerlejlighed>
</ejerlejligheder>
</forandringer>
为了支持这一点,我创建了一个如下所示的模板。但是我不知道如何根据 anvendelse
标签是否存在来使参数 show-anvendelse
的 select 语句为真或假。
<xsl:call-template name="ejerlejlighed-table-only">
<xsl:with-param name="lejligheder" select="current-group()"/>
<xsl:with-param name="show-anvendelse" select="false()"/>
</xsl:call-template>
尝试exists(xpath)
函数:
<xsl:call-template name="ejerlejlighed-table-only">
<xsl:with-param name="lejligheder" select="current-group()"/>
<xsl:with-param name="show-anvendelse" select="exists(anvendelse)"/>
</xsl:call-template>
你的问题上下文不明确。您的描述中没有任何内容表明需要分组 and/or 来调用命名模板。
如果您要为每个 ejerlejlighed
创建一行,并且您只想在至少一个 ejerlejlighed
有一个 anvendelse
子项时创建一个特定的列,那么显然您想要对所有行进行此测试一次,并在每一行中使用结果 - 这是一个简化的示例:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/forandringer">
<xsl:variable name="anvendelse" select="ejerlejligheder/ejerlejlighed/anvendelse" />
<table>
<xsl:for-each select="ejerlejligheder/ejerlejlighed">
<row>
<!-- mandatory columns -->
<xsl:if test="$anvendelse">
<optional-column>
<!-- some value -->
</optional-column>
</xsl:if>
</row>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
您可以统计 anvendelse
个标签的数量,看看是否至少有一个值:
<xsl:call-template name="ejerlejlighed-table-only">
<xsl:with-param name="lejligheder" select="current-group()"/>
<xsl:with-param name="show-anvendelse" select="count(//ejerlejlighed/anvendelse) > 0"/>
</xsl:call-template>
不清楚您是如何调用 ejerlejlighed-table-only
模板的,但请尝试在 count
中使用最具体的选择器以避免性能损失。
我正在使用 XSLT 生成一个 table,其中包含 XML 中每个 ejerlejlighed
标签的一行(见下文)。
路径:forandringer->ejerlejlighed->ejerlejlighed
每个 ejerlejlighed
标签包含一系列信息,这些信息应以列的形式显示,其中一个标签是可选的:anvendelse
.
问题:
我的客户要求仅当至少一个 ejerlejlighed
-标签包含此信息时才显示 anvendelse
-标签的列。
andringer->ejerlejligheder->ejerlejlighed->anvendelse 的路径
<forandringer>
<aendrings>
<changesOrder>1</changesOrder>
<sagsoperationKode>EOPEF</sagsoperationKode>
<sagsoperationBetegnelse>Oprettelse af ejerlejlighedsfællesskab</sagsoperationBetegnelse>
<hovedejendomBFEnr>3330122</hovedejendomBFEnr>
<hovedejendomType>SFE</hovedejendomType>
</aendrings>
<aendrings>
<changesOrder>2</changesOrder>
<sagsoperationKode>ENOPAH</sagsoperationKode>
<sagsoperationBetegnelse>Anden hjemmel*</sagsoperationBetegnelse>
<hovedejendomBFEnr>3330122</hovedejendomBFEnr>
<hovedejendomType>SFE</hovedejendomType>
<aktuelBFEnr>100229741</aktuelBFEnr>
<aktuelEJLnr>1</aktuelEJLnr>
<kommentar>§18</kommentar>
</aendrings>
<ejerlejligheder>
<mainPropertyBFENumber>3330122</mainPropertyBFENumber>
<ejerlejlighed>
<BFENumber>100229741</BFENumber>
<ejerlejlighedNr>1</ejerlejlighedNr>
<adresse>Ukendt adresse</adresse>
<areal>100</areal>
<fordelingstal>25/100</fordelingstal>
</ejerlejlighed>
<ejerlejlighed>
<BFENumber>100229742</BFENumber>
<ejerlejlighedNr>2</ejerlejlighedNr>
<adresse>Ukendt adresse</adresse>
<anvendelse>Erhverv</anvendelse>
<areal>200</areal>
<fordelingstal>25/100</fordelingstal>
</ejerlejlighed>
<ejerlejlighed>
<BFENumber>100229743</BFENumber>
<ejerlejlighedNr>3</ejerlejlighedNr>
<adresse>Ukendt adresse</adresse>
<areal>200</areal>
<fordelingstal>25/100</fordelingstal>
</ejerlejlighed>
<ejerlejlighed>
<BFENumber>100229744</BFENumber>
<ejerlejlighedNr>4</ejerlejlighedNr>
<adresse>Ukendt adresse</adresse>
<areal>200</areal>
<fordelingstal>25/100</fordelingstal>
</ejerlejlighed>
</ejerlejligheder>
</forandringer>
为了支持这一点,我创建了一个如下所示的模板。但是我不知道如何根据 anvendelse
标签是否存在来使参数 show-anvendelse
的 select 语句为真或假。
<xsl:call-template name="ejerlejlighed-table-only">
<xsl:with-param name="lejligheder" select="current-group()"/>
<xsl:with-param name="show-anvendelse" select="false()"/>
</xsl:call-template>
尝试exists(xpath)
函数:
<xsl:call-template name="ejerlejlighed-table-only">
<xsl:with-param name="lejligheder" select="current-group()"/>
<xsl:with-param name="show-anvendelse" select="exists(anvendelse)"/>
</xsl:call-template>
你的问题上下文不明确。您的描述中没有任何内容表明需要分组 and/or 来调用命名模板。
如果您要为每个 ejerlejlighed
创建一行,并且您只想在至少一个 ejerlejlighed
有一个 anvendelse
子项时创建一个特定的列,那么显然您想要对所有行进行此测试一次,并在每一行中使用结果 - 这是一个简化的示例:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/forandringer">
<xsl:variable name="anvendelse" select="ejerlejligheder/ejerlejlighed/anvendelse" />
<table>
<xsl:for-each select="ejerlejligheder/ejerlejlighed">
<row>
<!-- mandatory columns -->
<xsl:if test="$anvendelse">
<optional-column>
<!-- some value -->
</optional-column>
</xsl:if>
</row>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
您可以统计 anvendelse
个标签的数量,看看是否至少有一个值:
<xsl:call-template name="ejerlejlighed-table-only">
<xsl:with-param name="lejligheder" select="current-group()"/>
<xsl:with-param name="show-anvendelse" select="count(//ejerlejlighed/anvendelse) > 0"/>
</xsl:call-template>
不清楚您是如何调用 ejerlejlighed-table-only
模板的,但请尝试在 count
中使用最具体的选择器以避免性能损失。