【问题标题】:How to extract values from an xml file using shell script?如何使用 shell 脚本从 xml 文件中提取值?
【发布时间】:2021-06-15 13:11:11
【问题描述】:

我有这个 xml 文件。

<body>
<part1>
   <para1>abc</para1>
   <para2>def</para2>
   <ver>1234</ver>
</part1>    
</body>

我需要将 ver 给出的值(即1234)存储在一个变量中。

【问题讨论】:

  • 那个问题不是相当重复的......这是关于提取属性值,而不是标签的主体。不过,答案将非常相似——只是 XPath 表达式有点不同。
  • 是的@Shawn,我遇到了很多问题,其中值存在于标签本身中。我尝试修改这些答案,但无法找到解决方案。感谢您重新打开。

标签: xml shell awk grep xmllint


【解决方案1】:

不同的选择:

  1. 使用xmlstarlet:
ver=$(xmlstarlet sel -t -m //ver -v . test.xml)
  1. 使用xmllint(另请参阅Native shell command set to extract node value from XML
ver=$(xmllint --xpath "//ver/text()" test.xml)
  1. 使用gawk:
ver=$(gawk -F "[><]" '/<ver>/{ print $3 }' test.xml)

【讨论】:

  • awk 之一(它是所有 awk 通用的,不是 gawk 特定的)会像 awk -F'[&lt;&gt;]' '$2=="ver"{ print $3 }' 那样更健壮。如果 &lt;ver&gt; 恰好存在于输入中的其他字符串中,那也不会失败。
  • 谢谢 Ed,我会一直给你留一些改进的??
  • 使用xidelver=$(xidel -s test.xml -e '//ver')eval "$(xidel -s test.xml -e 'ver:=//ver' --output-format=bash)"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
  • 2015-11-04
  • 2019-10-15
  • 2011-08-14
  • 1970-01-01
相关资源
最近更新 更多