我并不经常尝试实现某种尝试集成三种不同语言(如果算上bash)的东西。
我想编写一个小工具来扫描javadoc javadoc包中的HTML文件,重点是如下所示的块:
<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.")'。这至少适用于我正在处理的数据。
发布于 2019-01-11 21:57:33
您可以组合>(子)+(邻接兄弟) element(dl标记.)合并如下:
dl > dt + dd
这意味着:给我一个元素,它是一个dd标记,是dt的一个邻接兄弟,也是dl的一个子元素。
console.log(document.querySelector('dl > dt + dd').innerText)dl > dt + dd {
color: salmon;
}<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.8</dd>
</dl>
发布于 2019-01-12 02:32:18
如果您愿意使用XPath而不是css选择器,那么您可以轻松地通过匹配元素的父节点进行升级。这可以通过perl XML::XPath命令行工具或xmllint来完成。
$ 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.8https://stackoverflow.com/questions/54154514
复制相似问题