我必须将microodata(schema.org)放在html标签中,如下所示:
<div class="list_item" itemtype="http://schema.org/Hotel" itemscope="itemscope">
我想将所有微数据内容放在一个变量中:
<xsl:param name="schema_main">
<xsl:choose>
<xsl:when test="$list_type = 'hotels'">
<xsl:text>itemtype="http://schema.org/Hotel" itemscope="itemscope"</xsl:text>
</xsl:when>
<xsl:when test="$list_type = 'sight'">
<xsl:text>itemtype="http://schema.org/CivicStructure" itemscope="itemscope"</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:param>
我不能这样做,因为我必须在xslt中指定属性名称以放置任何内容:
<div class="list_item" itmescope="{$some_variable}">
所以问题是 - 我可以将带有属性名称和属性值的字符串放在带有xslt的html标记中吗?类似的东西:
<div class="list_item" $variable_with_attribute_name_and_attribute_value>
提前致谢
答案 0 :(得分:3)
我不相信你可以按照你描述的方式使用参数。但如果目标是删除重复编码,则可以通过命名模板而不是变量来实现。
例如,这是一个命名模板
<xsl:template name="schema_main">
<xsl:attribute name="itemtype">
<xsl:choose>
<xsl:when test="$list_type = 'hotels'">
<xsl:text>http://schema.org/Hotel</xsl:text>
</xsl:when>
<xsl:when test="$list_type = 'sight'">
<xsl:text>http://schema.org/CivicStructure</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:attribute>
<xsl:attribute name="itemscope">itemscope</xsl:attribute>
</xsl:template>
要调用它,要将属性添加到当前元素,您只需执行此操作
<div>
<xsl:call-template name="schema_main"/>
</div>
然后输出如下:
<div itemtype="http://schema.org/Hotel" itemscope="itemscope" />
假设您已将 list_type 设置为酒店。注意,如果 list_type 在范围内不是全局的,则可以将参数传递给命名模板。
答案 1 :(得分:1)
这可以通过一种非常简单的方式完成 - 不使用<xsl:choose>
/ <xsl:when>
而不使用<xsl:call-template>
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my" exclude-result-prefixes="my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="list_type" select="'BB'"/>
<my:Schemas>
<schema type="Hotel" aka="hotels"/>
<schema type="CivicStructure" aka="sight"/>
<schema type="BreadAndBreakfast" aka="BB"/>
</my:Schemas>
<xsl:variable name="vSchemas" select=
"document('')/*/my:Schemas/*"/>
<xsl:template match="/">
<div class="list_item"
itemtype="http://schema.org/{$vSchemas[@aka=$list_type]/@type}"
itemscope="itemscope"/>
</xsl:template>
</xsl:stylesheet>
将此转换应用于任何XML文档(本示例中未使用)时,会生成所需的正确结果:
<div class="list_item" itemtype="http://schema.org/BreadAndBreakfast"
itemscope="itemscope"/>
注意:<my:Schemas>
元素通常作为外部参数传递给转换,在这种情况下,它将直接引用,不带document()
函数。