比方说,我有一个完整的html文档作为XML输入。
如果我只想输出HTML中的第一个(或任何)图像,XSLT文件将如何显示?XSLT获取特定标记的第一个匹配项
回答
一个文档中选择第一个<img>
元素的一个XPath表达式是:
(//img)[1]
请注意是一个常见的错误 - 由@Oded
在他的回答让是建议以下XPath表达式 - 通常它可以选择多个元素:
//img[1]
(:错误!!! :)
这将选择文档中的所有<img>
元素,其中每一个元素都是其父元素的第一个子元素<img>
。
下面是这个常见的错误的确切的解释 - 在W3C XPath 1.0 Recommendation:
注意:位置路径//para[1]
并不意味着一样的位置路径/descendant::para[1]
。后者选择第一个后裔para
元素;前者选择所有后代para
元素,这是他们父母的第一个孩子。
更进一步的问题存在如果文档已经定义了默认名称空间,这必须是XHTML的情况。 XPath将任何前缀名称归属于否命名空间和表达式(//img)[1]
不选择节点,因为文档中没有属于的元素没有名称空间并且名称为img
。
在这种情况下,有指定想要的XPath表达式有两种方式:
(//x:img)[1]
- 其中前缀x
关联(由主导语言)与特定默认namespcae(在这种情况下,该是XHTML命名空间)。(//*[name()='img'])[1]
XPath表达式将从HTML页面检索第一个图像:(//img)[1]
。
请参阅@Dimitre Novatchev
的答案以获取有关问题的更多信息。
请参阅我的回答,以解答与您的答案有关的问题。阅读XPath规范 - “//”缩写的定义,并搜索这个频繁的错误。如果问题仍然不清楚,请提出一个单独的问题,很多人会很乐意解释。 :) – 2010-04-23 13:02:47
**这个答案是W R O N G ** !!!!!请参阅我的解答。 – 2010-04-23 13:18:06
我绝对不想阅读XPath规范。但是我明白迪米特雷在说什么。 '// img [1]'将选择* any * parent的第一个img标签,而不是第一个文档。 – 2010-04-23 13:23:13
- 1. RxExp匹配第一个标记
- 2. SQL获取第一个匹配的行
- 3. 获取匹配特定CIDR
- 4. 在XSLT/XPath中,如何获取与特定名称不匹配的第一个属性?
- 5. 在标记中获取特定类的最后一项
- 6. 从第一和最后一个记录匹配的标准
- 7. 识别重复项并标记第一个匹配项和所有其他匹配项
- 8. Xpath使用href标记中的匹配文本获取第二个url
- 9. 找到第一个匹配时,打破每个循环的XSLT
- 10. 如何匹配NodeList中的特定项目并获取它NodeValues?
- 11. PHP:获取匹配特定值
- 12. 删除第一个匹配项
- 13. 查找与标准匹配的第一个序列项目
- 14. 如何匹配第一个/之后的特定字符
- 15. 获得模式的第一个匹配项
- 16. 如何使用XSLT匹配文档中的第一个元素?
- 17. 只显示第一个匹配的XSLT转换
- 18. XSLT:获取起始标记的长度
- 19. 第一个捕获组匹配不同
- 20. 使用xslt删除特定标记
- 21. 拉特定记录只匹配多个行中的一组值
- 22. Stream方式获取第一个元素匹配的索引boolean
- 23. XSLT:获取节点,在一个特定的值存在
- 24. 获取给定标记的最后一个git标记
- 25. 获取第一个TBL中的所有记录和第二个TBL中的匹配(指示存在的那些)
- 26. 获取git中特定标记下方的标记
- 27. 如果存在特定的匹配项,则返回一个值
- 28. sed:是否有一个选项可以替换每行匹配的第N个和第M个匹配项?
- 29. 在数据的最后一个序列中获得第一个匹配项
- 30. REGEXP_LIKE匹配不像特定字符串的XML标记内容
你有什么迄今得到?什么不起作用? – Oded 2010-04-23 12:29:38
好问题(+1)。看到我的答案是迄今唯一正确的解决方案。 :) – 2010-04-23 13:03:41