加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xmllint无法使用xpath进行正确查询

发布时间:2020-12-16 01:53:58 所属栏目:百科 来源:网络整理
导读:我试图查询由一个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/
我试图查询由一个xml文件生成的。 xmlwf说它很好形成。通过使用xmllint的调试选项,我得到以下:
$ xmllint --debug doc.xml
DOCUMENT
version=1.0
encoding=UTF-8
URL=doc.xml
standalone=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>
我不使用xmllint,但我认为您的XPath不工作的原因是因为您的doc.xml文件正在使用默认命名空间(http://purl.org/net/ulf/ns/0.4-02)。

从我可以看到,你有2个选项。

A.在shell模式下使用xmllint,并用前缀声明命名空间。然后,您可以在XPath中使用该前缀。

xmllint --shell doc.xml
    / > setns x=http://purl.org/net/ulf/ns/0.4-02
    / > xpath /x:chat

B.使用local-name()匹配元素名称。

xmllint --xpath /*[local-name()='chat']

您可能还需要使用namespace-uri()=’http://purl.org/net/ulf/ns/0.4-02’以及local-name(),以确保返回正确的内容返回。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读