XML:不可捕获的属性

前端开发 2026-07-08
xidel 'https://en.wikipedia.org/wiki/List_of_trigonometric_identities' -e '/html/body/div[3]/div/div[3]/main/div[3]/div[3]/div[2]/table[1]/tbody/tr[2]/td/span/a/img' --output-format=xml

输出

<?xml version="1.0" encoding="UTF-8"?>
<img src="//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Trig_Functions.svg/250px-Trig_Functions.svg.png" decoding="async" width="250" height="250" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Trig_Functions.svg/500px-Trig_Functions.svg.png 2x" data-file-width="419" data-file-height="419"/>

, 但随后

xidel 'https://en.wikipedia.org/wiki/List_of_trigonometric_identities' -e '/html/body/div[3]/div/div[3]/main/div[3]/div[3]/div[2]/table[1]/tbody/tr[2]/td/span/a/img' --output-format=xml | xidel -e '*[@src]'

导致输出为空。

为什么会这样?

解决方案

简短回答

与其使用 -e '*[@src]',不如使用 -e 'img/@src',或 -e '//@src'

详细解答

我建议你美化HTML源代码,将其保存在本地,并对它进行彻底检查,以便创建你自己的带有唯一标识符的查询:

$ xidel -s "https://en.wikipedia.org/wiki/List_of_trigonometric_identities" -e . \
  --output-node-format=html --output-node-indent > List_of_trigonometric_identities.htm

$ xidel -s "List_of_trigonometric_identities.htm" \
  -e '//td[@class="sidebar-image"]/span/a/img/@src'
//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Trig_Functions.svg/250px-Trig_Functions.svg.png

你可能也注意到,在同一个 元素节点中,还有该图像的500像素版本:

$ xidel -s "List_of_trigonometric_identities.htm" \
  -e '//td[@class="sidebar-image"]/span/a/img/@srcset'
//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Trig_Functions.svg/500px-Trig_Functions.svg.png 2x

$ xidel -s "List_of_trigonometric_identities.htm" \
  -e '//td[@class="sidebar-image"]/span/a/img/tokenize(@srcset)[1]'
//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Trig_Functions.svg/500px-Trig_Functions.svg.png

如果你想要最高分辨率的PNG图像,或原始的SVG文件,你可以通过对图片链接进行“点击”来进一步查看 "/wiki/File:Trig_Functions.svg"

$ xidel -s "List_of_trigonometric_identities.htm" \
  -e '//td[@class="sidebar-image"]/span/a/@href'
/wiki/File:Trig_Functions.svg

$ xidel -s "https://en.wikipedia.org/wiki/List_of_trigonometric_identities" \
  -f '//td[@class="sidebar-image"]/span/a/@href' -e . \
  --output-node-format=html --output-node-indent > Trig_Functions.svg.htm

$ xidel -s "Trig_Functions.svg.htm" -e '//div[@class="fullImageLink"]/a/@href'
//upload.wikimedia.org/wikipedia/commons/4/48/Trig_Functions.svg

$ xidel -s "Trig_Functions.svg.htm" -e '//div[@class="fullImageLink"]/div/span/a/@href'
//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Trig_Functions.svg/250px-Trig_Functions.svg.png
//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Trig_Functions.svg/500px-Trig_Functions.svg.png
//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Trig_Functions.svg/960px-Trig_Functions.svg.png
//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Trig_Functions.svg/1280px-Trig_Functions.svg.png
//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Trig_Functions.svg/3840px-Trig_Functions.svg.png

$ xidel -s "Trig_Functions.svg.htm" \
  -e '//div[@class="fullImageLink"]/div/span/a[last()]/@href'
//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Trig_Functions.svg/3840px-Trig_Functions.svg.png

最后要实际下载该图像(保存到当前目录):

$ xidel "https://en.wikipedia.org/wiki/List_of_trigonometric_identities" \
  -f '//td[@class="sidebar-image"]/span/a/@href' \
  -f '//div[@class="fullImageLink"]/div/span/a[last()]/@href' \
  --download .
Retrieving (GET): https://en.wikipedia.org/wiki/List_of_trigonometric_identities
Processing: https://en.wikipedia.org/wiki/List_of_trigonometric_identities
Retrieving (): https://en.wikipedia.org/wiki/File:Trig_Functions.svg
Processing: https://en.wikipedia.org/wiki/File:Trig_Functions.svg
Retrieving (): https://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Trig_Functions.svg/3840px-Trig_Functions.svg.png
Save as: ./Trig_Functions.svg.png
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章