首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用shellscript解析XML?

如何使用shellscript解析XML?
EN

Stack Overflow用户
提问于 2011-01-13 20:42:11
回答 10查看 257.1K关注 0票数 68

我想知道使用shellscript解析XML文件的最佳方式是什么?

  • 应该手动完成吗?
  • 是否存在第三层库?

如果你已经做到了,如果你能让我知道你是怎么做到的

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-01-14 01:27:39

你可以试试xmllint

xmllint程序解析一个或多个

文件,这些文件在命令行中指定为xmlfile。它打印各种类型的输出,具体取决于所选的选项。它对于检测XML代码和XML解析器本身中的错误都很有用。

它允许您使用--pattern选项通过xpath选择XML文档中的元素。

在Mac OS X (Yosemite)上,它是默认安装的。

在Ubuntu上,如果还没有安装,可以运行apt-get install libxml2-utils

票数 95
EN

Stack Overflow用户

发布于 2014-06-07 02:01:40

这里有一个完整的工作示例。

如果它只是提取电子邮件地址,你可以这样做:

1)假设XML文件spam.xml如下

代码语言:javascript
复制
<spam>
<victims>
  <victim>
    <name>The Pope</name>
    <email>pope@vatican.gob.va</email>
    <is_satan>0</is_satan>
  </victim>
  <victim>
    <name>George Bush</name>
    <email>father@nwo.com</email>
    <is_satan>1</is_satan>
  </victim>
  <victim>
    <name>George Bush Jr</name>
    <email>son@nwo.com</email>
    <is_satan>0</is_satan>
  </victim>
</victims>
</spam>

2)你可以使用这个简短的bash代码获取邮件并进行处理:

代码语言:javascript
复制
#!/bin/bash
emails=($(grep -oP '(?<=email>)[^<]+' "/my_path/spam.xml"))

for i in ${!emails[*]}
do
  echo "$i" "${emails[$i]}"
  # instead of echo use the values to send emails, etc
done

此示例的结果为:

代码语言:javascript
复制
0 pope@vatican.gob.va
1 father@nwo.com
2 son@nwo.com

重要说明:

不要把这个用在严肃的事情上。这对于尝试、获得快速结果、学习grep等都是可以的,但您绝对应该寻找、学习和使用用于生产的XML解析器(参见Micha下面的注释)。

票数 24
EN

Stack Overflow用户

发布于 2011-01-13 23:57:06

还有xmlstarlet (也可以在Windows上使用)。

http://xmlstar.sourceforge.net/doc/xmlstarlet.txt

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4680143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档