【问题标题】:How to extract class names from html tag如何从html标签中提取类名
【发布时间】:2016-01-04 08:42:08
【问题描述】:

我正在尝试从<span> 标记中提取第二类名称。

由于 xidel 文档真的很差。我不明白怎么做 使用函数filter()contains() 并将<span>标签与 类名“userstatus”并提取第二个类名。

我现在有这个,但是当一个参数包含单词 userstatus 时,我无法告诉 XIDEL 工具将 span 标签与类匹配。

xidel -e http://intranet.website.com '//li[@class='status']/span[@class==match("userstatus").....

感谢您的任何建议

<li class="status">
  <span class="userstatus offline strongfont2">
    blaa bllaa foo text
  </span>
</li>

<li class="status">
  <span class="userstatus online italicfont1">
    blaa bllaa foo text
  </span>
</li>`

我需要提取&lt;span&gt; 标记的类参数
我不需要 &lt;span&gt; 标签的文本或 HTML 内容。

结果如下:

class="用户状态离线 strongfont2"

class="userstatus online italicfont1"

【问题讨论】:

  • 我现在有这个,但它的语法不好 - 这是什么意思?
  • @obi2016 如果您仍然想知道为什么使用xidel 二进制文件没有得到任何输出,那是因为-e 选项放错了位置。 --> xidel &lt;url&gt; -e '&lt;extraction query&gt;'

标签: html xpath xidel


【解决方案1】:

如果要查找class 属性值包含"userstatus"&lt;span&gt; 元素,然后返回class,可以使用以下XPath 1.0 表达式:

//li[@class='status']/span[contains(@class, 'userstatus')]/@class

由于 Xidel 似乎支持 XPath 2.0,您可以使用以下表达式从上述 &lt;span&gt; 元素中仅提取第二个 CSS 类:

for $span in //li[@class='status']/span[contains(@class, 'userstatus')] 
return tokenize($span, ' ')[2]

我以前从未使用过 Xidel,但是在 Xidel online tester 中测试时,上面的 XPath 似乎可以工作。你也可以在xpathtester.com看到上述XPath的demo

【讨论】:

  • 是的!这正是我想要提取的。但是 xidel 没有打印结果。它在测试工具中运行良好,但在 XIDEL 二进制无输出的情况下无法正常工作...... :( 但我们已经接近解决方案了!
【解决方案2】:

您可以使用 jQuery.hasClass() 来确定 HTML 元素是否具有关联的特定类 - hasClass Example

【讨论】:

  • 对不起,我正在编写 shell 脚本。我需要解释如何使用 XIDEL 功能 filter(....) 和 contains[.....] 提取的数据将在稍后在 shell 脚本中进行处理和验证。我正在寻找纯 XIDEL 解决方案。有可能,但我不知道如何编写查询:(
  • 如何更简单地提取这一行 何时是父
  • 。但类参数可能是动态的。 "userstatus" onlineoffline 始终只有 3 个单词。就是这样。
猜你喜欢
相关资源
最近更新 更多
热门标签