比方说,我有一个完整的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. 使用xslt获取第一个xml块的标记名称
- 3. 获取第一个匹配的祖先包含一个特定的类
- 4. SQL获取第一个匹配的行
- 5. 获取匹配特定CIDR
- 6. 在XSLT/XPath中,如何获取与特定名称不匹配的第一个属性?
- 7. 获取特定标记的相应值-XML和XSLT
- 8. 在标记中获取特定类的最后一项
- 9. 从第一和最后一个记录匹配的标准
- 10. 获取所有行,直到匹配一个特殊匹配
- 11. 识别重复项并标记第一个匹配项和所有其他匹配项
- 12. 使用XSLT获取XML中指定标记旁边的标记
- 13. 仅在xslt中使用单标记标记的模式匹配
- 14. Xpath使用href标记中的匹配文本获取第二个url
- 15. 找到第一个匹配时,打破每个循环的XSLT
- 16. XSLT - 不匹配的标签
- 17. 如何匹配NodeList中的特定项目并获取它NodeValues?
- 18. PHP:获取匹配特定值
- 19. XSLT:如何匹配给定元素的第一次出现?
- 20. 删除第一个匹配项
- 21. 查找与标准匹配的第一个序列项目
- 22. 如何匹配第一个/之后的特定字符
- 23. XSLT 2.0:替换模式匹配特定标准
- 24. SQL选择第一个匹配标准
- 25. 获得模式的第一个匹配项
- 26. 如何获得模式的第一个匹配项?
- 27. XSLT:获取起始标记的长度
- 28. 只显示第一个匹配的XSLT转换
- 29. 如何使用XSLT匹配文档中的第一个元素?
- 30. jquery filter:只获得第一个匹配?
你有什么迄今得到?什么不起作用? – Oded 2010-04-23 12:29:38
好问题(+1)。看到我的答案是迄今唯一正确的解决方案。 :) – 2010-04-23 13:03:41