我正在尝试查询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 "..." -
- 2 回答
- 0 关注
- 1371 浏览
相关问题推荐
添加回答
举报
0/150
提交
取消