使用 xpath 同时选择属性和内容?
Posted
技术标签:
【中文标题】使用 xpath 同时选择属性和内容?【英文标题】:Select both attribute and content using xpath? 【发布时间】:2018-09-12 01:39:21 【问题描述】:Xpath //a[contains(@class, 'storylink')]/@*
将提取锚标签的所有属性。我的 xml 中的锚标记没有通常具有链接内容的 title 属性。有没有办法使用 XPATH 1.0 选择 锚链接中的 href 和文本内容?
【问题讨论】:
添加源内容的完整示例(完整的 XML 片段)和确切的预期输出。 @DavidEnnis 例如:http://news.ycombinator.com 我正在尝试提取标题和 href。 对不起...我的意思是在您的示例中-不是让某人不得不在网页的来源上四处寻找。使用示例输入和预期输出扩展您的问题.. 【参考方案1】:只需使用//a[contains(@class, 'storylink')]
选择a
元素本身,然后在返回的元素节点上使用javascript 方法获取所需的属性和/或文本内容。
您确实可以使用 XPath 同时选择属性和文本,但如果它们都在一个查询结果中混杂在一起,那么再次将它们分开会很麻烦。
【讨论】:
对于我的用例,我试图找到一个 XPath 与 Google Sheets=ImportXml()
公式一起使用,该公式直接将提取的值填充到工作表中。即一列中的标题和另一列中的href。【参考方案2】:
如果要在单个 XPath 选择中同时选择 @href
和 text()
,可以使用联合运算符 |
。
使用 XPath 1.0,这可能是您能做的最好的事情:
//a[contains(@class, 'storylink')]/@href | //a[contains(@class, 'storylink')]/text()
使用 XPath 2.0(或更高版本),您可以避免重复锚点选择标准:
//a[contains(@class, 'storylink')]/(@href,text())
【讨论】:
以上是关于使用 xpath 同时选择属性和内容?的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式、xpath、BeautifulSoup和JSONPath的区别?