假设我有一个完整的HTML文档作为XML输入。
如果我只想从html中输出第一个(或任何)图像,XSLT文件将如何显示?
答案 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表达式:
(//x:img)[1]
- 其中前缀x
与托管语言相关联,具有特定的默认名称(在这种情况下,这是 XHTML名称空间 )。
(//*[name()='img'])[1]
答案 1 :(得分:2)
XPath表达式将从HTML网页中检索第一张图片:(//img)[1]
。
有关问题的详细信息,请参阅@Dimitre Novatchev
的答案。