使用xmlstarlet或其他任何内容在XML标记中注入大值

时间:2015-06-12 07:33:48

标签: xml shell

我正在尝试使用xmlstarlet ed修改xml中的标记值,但我无法弄清楚如何使其与大值一起使用...

我正在尝试使用Article_texte下载的内部网页的完整源代码更新代码curl

这里是my_xml的摘录,其中包含URL(用于测试目的的linuxgizmos.com)

<?xml version="1.0" encoding="utf-8">
<DOCUMENT>
  <Article_url>http://linuxgizmos.com/raspberry-pi-stays-sky-high-in-2015-hacker-sbc-survey/</Article_url>
  <Article_texte />
</DOCUMENT>

这是我的shell脚本的摘录

# extract url from file
url_to_dl=$(xmlstarlet sel -t -v "/DOCUMENT/Article_url" my_xml.xml)

# download and update document
xmlstarlet ed -L -u "/DOCUMENT/Article_texte" -v "$(curl -Ls $url_to_dl 2>&1)" my_xml.xml

第二个命令行出错:

  

/ usr / bin / xmlstarlet:倾听d&#39;参数trop longue

我用那个****度过了我的一天,一些帮助真的很值得欣赏:)

1 个答案:

答案 0 :(得分:0)

嗯,首先,为什么有人想问这个问题-_-&#39; ?

现在,我找到了一个&#34;解决方案&#34;不是很性感,但却有把戏

if [ -f "$xml.insert" -a -s "$xml.insert" ]; then
  echo "merging ..."
  # the tag <Article_texte/>  should be on the form : 
  # <Article_texte>
  # </Article_texte>
  sed -i -e "s#<Article_texte\s*\(/>\|></Article_texte>\)#\n<Article_texte>\n</Article_texte>\n#" $xml

  # we load the content of `$xml.insert` file after the opening tag
  sed -i -e "/<Article_texte>/ r $xml.insert" $xml

  rm -f "$xml.insert"
fi