【问题标题】:XML Tags to bash variablesbash 变量的 XML 标记
【发布时间】:2020-08-25 09:24:03
【问题描述】:

我正在使用以下 curl 命令:

curl  -u $username:$password --silent "https://mail.google.com/mail/feed/atom" | \tr -d '\n'

要获得这样的示例输出:

<?xml version="1.0" encoding="UTF-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#">

<title>Gmail - Inbox for user@email.com</title>
<tagline>New messages in your Gmail Inbox</tagline>
<fullcount>13</fullcount>


<entry>
    <title>Backup Status</title>
    <summary>Backup Successful </summary>
    <link rel="alternate" href="https://mail.google.com/mail?account_id=user@email.com&amp;message_id=1715ed8b619b4e4b&amp;view=conv&amp;extsrc=atom" type="text/html"/>
    <modified>2020-04-07T19:53:47Z</modified>
    <issued>2020-04-07T19:53:47Z</issued>
    <id>tag:gmail.google.com,2004:1663333312794531403</id>
    <author>
        <name>Carbonite</name>
        <email>noreply@carbonite.com</email>
    </author>
</entry>
<entry>
    <title>Backup Status Report</title>
    <summary>Dear IDrive User, Ref : UserName....</summary>
    <link rel="alternate" href="https://mail.google.com/mail?account_id=user@email.com&amp;message_id=1715ed8b619b4e4b&amp;view=conv&amp;extsrc=atom" type="text/html"/>
    <modified>2020-04-07T19:53:47Z</modified>
    <issued>2020-04-07T19:53:47Z</issued>
    <id>tag:gmail.google.com,2004:1663333312794531403</id>
    <author>
        <name>no-reply</name>
        <email>no-reply@idrive.com</email>
    </author>
</entry>    

<entry>
    <title>Notification</title>
    <summary>Notification Status</summary>
    <link rel="alternate" href="https://mail.google.com/mail?account_id=user@email.com&amp;message_id=1715ed8b619b4e4b&amp;view=conv&amp;extsrc=atom" type="text/html"/>
    <modified>2020-04-07T19:53:47Z</modified>
    <issued>2020-04-07T19:53:47Z</issued>
    <id>tag:gmail.google.com,2004:1663333312794531403</id>
    <author>
        <name>Software Notification</name>
        <email>noreply@.email.com</email>
    </author>
</entry>

<entry>
  ............etc
</entry>

我想提取所有&lt;entry\title&gt;,&lt;entry\summary&gt;,&lt;entry\author\name&gt; 的值并将它们设置为 bash 脚本中的变量。

如何将这些值设置为变量?

我想从 xml 中提取值并将它们发送到变量,例如 &lt;title&gt; 到 $title、&lt;summary&gt; 到 $summary 和 &lt;name&gt; 到 $name。

所以一个例子是:

$title = 电子邮件标题

$summary = 电子邮件正文

$name = 来自名字

【问题讨论】:

  • edit 您的问题,以根据您发布的示例输入显示预期输出。
  • 我添加了更多关于我正在寻找的信息。这就是你要找的吗?
  • 这看起来像是我正在尝试做的事情:unix.stackexchange.com/questions/500401/…
  • @EdMorton 我重新输入了我的问题,我希望很清楚我在问什么,
  • $subject: &lt;title&gt; 只是您预期输出的某种模板,它不是您预期的输出。 $subject: Gmail - Inbox for user@email.com 可能是您预期输出的一行,因为它以新格式显示包含来自您输入的数据值的输出。所以,最后一次,请edit您的问题显示您发布的示例输入的预期输出,以便我们可以帮助您,如果不清楚,请查看How to Ask

标签: xml awk sed grep xmlstarlet


【解决方案1】:

尝试以下方法:

首先,要使用 xmlstarlet 为变量赋值,请使用这些:

title=$(xmlstarlet sel -t -v "//entry/title" input.xml)
name= $(xmlstarlet sel -t -v "//entry/author/name" input.xml)
summary = $(xmlstarlet sel -t -v "//entry/summary" input.xml)

在您的示例 xml 中,为每个变量分配了 3 个值(来自 3 封电子邮件)。例如,要访问$title 中的内容,请使用:

for val in "${title[@]}";
do
  printf "$val\n"
done

输出:

Backup Status
Backup Status Report
Notification

【讨论】:

  • 谢谢,我回家后试试这个。代替使用 input.xml 的文件输入,我可以使用变量,例如 xml_var=curl -u $.....?谢谢
  • @vlad - 是的,您可能可以使用 curl 并将其通过管道传输到 xmlstarlet;类似curl -g "some url" -s | xmlstarlet sel ....".
猜你喜欢
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 2012-12-19
  • 1970-01-01
相关资源
最近更新 更多