XSLT获取特定标记的第一个匹配项

时间:2010-04-23 12:26:35

标签: xslt

假设我有一个完整的HTML文档作为XML输入。
如果我只想从html中输出第一个(或任何)图像,XSLT文件将如何显示?

2 个答案:

答案 0 :(得分:17)

选择文档中第一个<img>元素的一个XPath表达式是:

<强> (//img)[1]

请注意 常见的错误 - 由@Oded在他的回答中提出的是建议以下XPath表达式 - 通常它可能会选择不止一个元素:

//img[1] (:错!!!!)

这将选择文档中的所有<img>元素,每个元素都是其父元素的第一个<img>子元素。

以下是这个常见错误的确切解释 - 在W3C XPath 1.0 Recommendation

注意:位置路径//para[1]与位置路径/descendant::para[1]的含义不同。后者选择第一个后代para元素;前者选择所有后代para元素,这些元素是他们父母的第一个孩子。

如果文档定义了默认命名空间,则存在另一个问题,这必须是XHTML的情况。 XPath将任何未加前缀的名称视为属于 no namespace ,并且表达式(//img)[1]不选择任何节点,因为文档中没有属于 no namespace 的元素,名称为img

在这种情况下,有两种方法可以指定所需的XPath表达式:

  1. (//x:img)[1] - 其中前缀x与托管语言相关联,具有特定的默认名称(在这种情况下,这是 XHTML名称空间 )。

  2. (//*[name()='img'])[1]

答案 1 :(得分:2)

XPath表达式将从HTML网页中检索第一张图片:(//img)[1]

有关问题的详细信息,请参阅@Dimitre Novatchev的答案。