相关疑难解决方法(0)

xmllint无法使用xpath正确查询

我正在尝试查询adium生成的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
Run Code Online (Sandbox Code Playgroud)

一切似乎都解析得很好.但是,当我尝试查询最简单的东西时,我什么都得不到:

$ xmllint --xpath '/chat' doc.xml 
XPath set is empty
Run Code Online (Sandbox Code Playgroud)

发生了什么?使用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>
Run Code Online (Sandbox Code Playgroud)

xml xpath xmllint

49
推荐指数
2
解决办法
3万
查看次数

在 Mac 上的 bash 中从 xml 中提取值

我需要从此 xml 中提取名称值(产品查找器):

文件:config.xml

<?xml version="1.0" encoding="utf-8"?>
<widget id="com.abc.app" version="1.3.1" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0" ios-CFBundleVersion="1.3.1.5" android-versionCode="5">
    <name>Product Finder</name>
    <description>
        Description
    </description>
</widget>
Run Code Online (Sandbox Code Playgroud)

我试过了:

mles$ cat config.xml | grep '<name>'
    <name>Product Finder</name>
Run Code Online (Sandbox Code Playgroud)

其他一些答案建议使用grep -oPm1 "(?<=<xmltag>)[^<]+",但这会产生错误:

mles$ cat config.xml | grep -oPm1 "(?<=<name>)[^<]+"
usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
[-e pattern] [-f file] [--binary-files=value] [--color=when]
[--context[=num]] [--directories=action] [--label] [--line-buffered]
[--null] [pattern] [file ...]
Run Code Online (Sandbox Code Playgroud)

如何获取名称值?我需要一个没有依赖关系的解决方案,所以grep会是首选

regex xml bash grep

5
推荐指数
1
解决办法
9363
查看次数

标签 统计

xml ×2

bash ×1

grep ×1

regex ×1

xmllint ×1

xpath ×1