我以前在某处读过,但现在无法解释这个问题,所以如果有人能指出我正确的方向,我将不胜感激。
我正在为 HTML 文档的规范 XPath 创建 XPath 选择器。下面是一个简单的示例(包含在 HTMLUnit 中,它在其背景上使用 xalan,但可以是任何 XPath 处理器)。
如果我运行:
WebClient webClient = ......;
HtmlPage page = webClient.getPage("http://www.slideshare.com/");
System.out.println(page.getByXPath("/html/body/footer/div/div/div[2]/div[4]/ul/li[2]/a[*]/text()"));
我得到一个 [] 响应。但是,如果我改为运行(注意 a[ * ] vs a[ /* ]:
WebClient webClient = ......;
HtmlPage page = webClient.getPage("http://www.slideshare.com/");
System.out.println(page.getByXPath("/html/body/footer/div/div/div[2]/div[4]/ul/li[2]/a[/*]/text()"));
我得到 [Developers Section] 作为回应。
可以在位置谓词中添加通配符作为参数(即 [ * ])。但是,对于某些节点/标签(我特别注意到文本节点为 h1、h2...、p、b、strong 以及其他一些 html 标签为 li 或 ul)有时需要在通配符之前使用斜杠(即 [ / * ]) 得到结果。
有人可以提供有关这意味着什么的背景吗?我无法在 web 或 XPath 规范中找到对此的引用。