【发布时间】:2012-09-12 22:34:20
【问题描述】:
我会检查一个文档是否包含给定的值和 xpath,如果它确实使用了选定的值,则使用另一个值。我在 XSLT 方面真的很糟糕,但这是我要开始的:
<xsl:choose>
<xsl:when test="p//section.std[@type = 'SpecialSection']/p/img/@alt">
<xsl:apply-templates select="p//section.std[@type = 'SpecialSection']/p/img/@alt"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="p//meta-data.titles/meta-data.title"/>
</xsl:otherwise>
</xsl:choose>
当前未选择任何值。我怀疑我不能像以前那样编写我的选择测试。我不确定空值是否计算为布尔值。基本上我想测试第一个 xpath 是否返回一个值,它是否使用它,如果不使用块中的那个。
有什么帮助吗?
【问题讨论】:
-
您正确地进行了测试 - XPath 返回一个节点集,如果节点集不为空,则该节点集被评估为 true。我想错误在于您用于输出值的方法...您是否尝试使用
而不是 ? -
特别是,具有
alt=""的img将被匹配,即使属性值为空。如果要排除此类匹配项,则需要执行..../p/img/@alt[string()]之类的操作(仅匹配具有非空字符串值的 alt 属性)。 -
如果没有看到输入,我们无法判断这段代码的 sn-p 是否正确。请提供简化的示例输入文档和预期输出。另外,您使用的是哪个版本的 XSLT? 1.0?还是 2.0?
-
另外,我注意到您标记了问题xhtml。如果您的输入文档是 xhtml,您的 p 元素将需要 xhtml 前缀。您当前的代码片段将不匹配任何 xhtml:p 元素。
-
尼克,人们正在尝试猜测。请给我们(编辑问题并在那里输入)源 XHTML 文档和完整转换的小示例。另外,请提供转换的确切所需结果。