我有一个 xml 片段,如下所示
<xml>
<person>
<name>bob</name>
<holidays>
<visit>GB</visit>
<visit>FR</visit>
</holidays>
</person>
<person>
<name>joe</name>
<holidays>
<visit>DE</visit>
<visit>FR</visit>
</holidays>
</person>
<countrylist>
<country>GB</country>
<country>FR</country>
<country>DE</country>
<country>US</country>
</countrylist>
</xml>
我想根据该人是否访问过该国家/地区,用是或否列出国家列表中的所有国家。因此,上述 xml 的输出,例如
Bob
GB Yes
FR Yes
DE No
US No
Joe
GB No
FR Yes
DE Yes
US No
这是我到目前为止所尝试的:
<xsl:template match="xml">
<xsl:apply-templates select="person">
</xsl:apply-templates>
</xsl:template>
<xsl:template match="person">
<xsl:value-of select="name"></xsl:value-of>
<xsl:apply-templates select="holidays"></xsl:apply-templates>
</xsl:template>
<xsl:template match="holidays">
<xsl:variable name="v" select="holidays"></xsl:variable>
<xsl:for-each select="/xml/countrylist/country">
<xsl:variable name="vcountry" select="."></xsl:variable>
<xsl:if test="$v/holidays[$vcountry]">
<xsl:value-of select="$vcountry"></xsl:value-of><xsl:value-of select="'*'"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
编辑:我终于使用以下方法进行了管理;有没有更简单的方法?
<xsl:template match="xml">
<xsl:apply-templates select="person">
</xsl:apply-templates>
</xsl:template>
<xsl:template match="person">
<xsl:variable name="hols" select="holidays"/>
<xsl:value-of select="name"/>
<xsl:for-each select="/xml/countrylist/country">
<xsl:variable name="vcountry" select="."/>
<xsl:if test="$hols[visit=$vcountry]">
<xsl:value-of select="$vcountry"/>
<xsl:value-of select="'*'"/>
</xsl:if>
</xsl:for-each>
</xsl:template>