xml - xmlstarlet 在无效的 xhtml 上选择查询
问题描述
我尝试查询一个 xhtml 文件以提取标题,但没有这样做。
'file' 是这个网页的 wget 的输出文件。
具有完整 XPath 的元素 /html/body/div 1 /div[2]/div[3]/div/div[3]/div 1 /div/div[3]/div/div/div/div/span 1:
<span class="ep_name"> Trans-European energy infrastructure: Union list of projects of common interest </span>
期望的输出:
Trans-European energy infrastructure: Union list of projects of common interest
试过:
xmlstarlet sel -N n="http://www.w3.org/1999/xhtml" -t -m "/n:html/n:body/n:div[1]/n:div[2]/n:div[3]/n:div/n:div[3]/n:div[1]/n:div/n:div[3]/n:div/n:div/n:div/n:div/n:span[1][@class='ep_name']" -v . -n file
我得到了完整的错误列表;从“开始和结束标签不匹配”到“标签中数据过早结束”的所有内容,包括正文。xmlstarlet val 给了我“无效”和 xmlstarlet el 以下内容:
html
html/head
html/head/title
html/head/meta
html/head/meta
html/head/meta/meta
html/head/meta/meta
html/head/meta/meta
html/head/meta/meta
html/head/meta/meta
html/head/meta/meta
html/head/meta/meta
html/head/meta/meta
html/head/meta/meta
html/head/meta/meta
html/head/meta/meta
html/head/meta/meta
html/head/meta/meta/meta
html/head/meta/meta/meta
html/head/meta/meta/meta
html/head/meta/meta/style
html/head/meta/meta/style
html/head/meta/meta/style
html/head/meta/meta/style
html/head/meta/meta/style
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
html/head/meta/meta/script
procedure:66.70: Specification mandate value for attribute defer
<script type="text/javascript" src="/oeil/js/cookie-policy.js" defer></script>
xmlstarlet 是否有可能无法访问我要查询的内容?什么是解决方案?使用 sed 会非常棘手,因为很少,但文件中的标题是唯一的。
解决方案
https://oeil.secure.europarl.europa.eu/oeil/popups/ficheprocedure.do?lang=en&reference=2019/2907(DEA)上的文档似乎不是格式良好的 XML
相反,您可以尝试使用
xmllint --html --xpath "//title" <your-file>
或在一行中:
curl -sL "https://oeil.secure.europarl.europa.eu/oeil/popups/ficheprocedure.do?lang=en&reference=2019/2907(DEA)" | xmllint --html --xpath "//title/text()" - 2>/dev/null
推荐阅读
- xslt-2.0 - 动态替换给定数据中的子字符串(XML 到固定长度)
- django - 我如何在一个页面中显示用户帖子,同时用户可以在他们的页面中看到其他帖子?喜欢 Facebook 的工作方式吗?
- php - 从数据库中获取数据并匹配静态数组
- php - Laravel:仅为相关模型加载嵌套关系
- php - 如何获取 HTML5 表单输入默认值
- typescript - 打字稿不编译外部类 - 量角器测试
- python - 如何从列内指定的列表创建子列
- excel - 如何使用 VBA 将特定文本插入到现有公式中?
- c++ - 如何修复“条件中的变量声明必须具有初始化程序”
- python - 按具有最后日期的唯一名称和状态分组