为了账号安全,请及时绑定邮箱和手机立即绑定

xmllint无法正确使用xpath查询

xmllint无法正确使用xpath查询

qq_笑_17 2019-10-21 10:04:03
我正在尝试查询adium生成的xml文件。xmlwf说它格式正确。通过使用xmllint的调试选项,我得到以下信息:$ xmllint --debug doc.xmlDOCUMENTversion=1.0encoding=UTF-8URL=doc.xmlstandalone=true  ELEMENT chat    default namespace href=http://purl.org/net/ulf/ns/0.4-02    ATTRIBUTE account      TEXT        content=foo@bar.com    ATTRIBUTE service      TEXT compact        content=MSN    TEXT compact      content=     ELEMENT event      ATTRIBUTE type一切似乎都可以解析。但是,当我尝试查询最简单的内容时,却什么也没得到:$ xmllint --xpath '/chat' doc.xml XPath set is empty发生了什么?使用xpath运行该完全相同的查询将返回正确的结果(但是结果之间没有换行符)。我是在做错什么还是xmllint不能正常工作?这是xml的较短的匿名版本,显示了相同的行为:<?xml version="1.0" encoding="UTF-8" ?><chat xmlns="http://purl.org/net/ulf/ns/0.4-02" account="foo@bar.com" service="MSN"><event type="windowOpened" sender="foo@bar.com" time="2011-11-22T00:34:43-03:00"></event><message sender="foo@bar.com" time="2011-11-22T00:34:43-03:00" alias="foo"><div><span style="color: #000000; font-family: Helvetica; font-size: 12pt;">hi</span></div></message></chat>
查看完整描述

2 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

我知道这个问题现在已经很老了,但万一它可以帮助某人...


遇到了同样的问题,这是由于XML具有名称空间(有时在XML中的不同位置重复了)。发现最简单的方法是在使用xmllint之前删除名称空间:


sed -e 's/xmlns=".*"//g' file.xml | xmllint --xpath "..." -

在我的情况下,XML是UTF-16,因此我必须先转换为UTF-8(用于sed):


iconv -f utf16 -t utf8 file.xml | sed -e 's/encoding="UTF-16"?>/encoding="UTF-8"?>/' | sed -e 's/xmlns=".*"//g' | xmllint --xpath "..." -


查看完整回答
反对 回复 2019-10-21
  • 2 回答
  • 0 关注
  • 1371 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信