首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >形成css选择器序列作为pup的参数,以便从javadoc html中获得特定值。

形成css选择器序列作为pup的参数,以便从javadoc html中获得特定值。
EN

Stack Overflow用户
提问于 2019-01-11 21:50:47
回答 2查看 118关注 0票数 1

我并不经常尝试实现某种尝试集成三种不同语言(如果算上bash)的东西。

我想编写一个小工具来扫描javadoc javadoc包中的HTML文件,重点是如下所示的块:

代码语言:javascript
复制
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.8</dd>
</dl>

我想从中得到"1.8“值。

因此,我想我会找到一个命令行工具,可以解析HTML并知道如何提取它。

我找到了"小狗“工具(它是用”go“写的),它看起来很接近,但是现在我必须找到正确的CSS选择器序列才能到达这个元素。我试过几种变体,但没有真正做我想做的事。

更新

瑟勒夫被撕裂的答案已经接近尾声,事实上,我可以在某种程度上实现一些杂乱无章的方法来获取我想要的数据。

如果我只使用'dl dt + dd',它会给我提供许多匹配该模式的元素。理想情况下,我希望我能做一些像'dl dt (> span[class="simpleTagLabel"]) + dd'这样的事情,其中"> span .“事物是用来匹配的,但是在匹配跨度之后,它会“弹出”,所以它可以查找"dt“的对等点。我想在CSS中没有办法做到这一点。

我最大的解决办法是假设我所有真正的候选元素都有文本“1”。在他们身上。有了这个很大的假设,我可以使用'dl dt + dd:contains("1.")'。这至少适用于我正在处理的数据。

EN

回答 2

Stack Overflow用户

发布于 2019-01-11 21:57:33

您可以组合>(子)+(邻接兄弟) element(dl标记.)合并如下:

dl > dt + dd

这意味着:给我一个元素,它是一个dd标记,是dt的一个邻接兄弟,也是dl的一个子元素。

代码语言:javascript
复制
console.log(document.querySelector('dl > dt + dd').innerText)
代码语言:javascript
复制
dl > dt + dd {
 color: salmon;
}
代码语言:javascript
复制
<dl>
  <dt><span class="simpleTagLabel">Since:</span></dt>
  <dd>1.8</dd>
</dl>

票数 1
EN

Stack Overflow用户

发布于 2019-01-12 02:32:18

如果您愿意使用XPath而不是css选择器,那么您可以轻松地通过匹配元素的父节点进行升级。这可以通过perl XML::XPath命令行工具或xmllint来完成。

代码语言:javascript
复制
$ xpath -q -e "//dt/span[contains(@class,'simpleTagLabel')]/../../dd/text()" < test.html
1.8

$ xmllint --xpath "//dt/span[contains(@class,'simpleTagLabel')]/../../dd/text()" test.html
1.8
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54154514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档