我有两个文件xml,我需要从第一个xml文件中提取数据并插入到第二个xml文件中

时间:2011-07-19 17:27:22

标签: xml bash extract

我有两个文件xml,我需要从第一个xml文件中提取数据并插入到第二个xml文件中。

第一个文件:

<?xml version="1.0" encoding="utf-8"?>
<ITEMS>
<EVENT>
<codpal>8387</codpal>
<programming>ProgramName</programming>
<idCategory>28</idCategory>
<date>2011-07-16 17:00:00</date>
</EVENT>
</ITEMS>

第二档:

<?xml version="1.0" encoding="utf-8"?>
<ITEMS>
<EVENT>
<sign codice="xxxx" pro="xxxxxxxxxxx" id="xxx" data="xxxx xxx xxxx xx"  />
</EVENT>
</ITEMS>

任何人都可以帮助我吗?第一个文件改变任何20分钟。我需要创建一个bash脚本来自动导出。

3 个答案:

答案 0 :(得分:1)

如果这是一个选项,最好编写一个XSLT来转换它。这样可以避免解析错误/不规则并使其更具可重用性。

答案 1 :(得分:0)

我会剥离html标签和空行,然后将结果放在一个数组中:

values=(`sed 's/<[^>]*>//g' /tmp/xml | sed '/^$/d'`)
echo ${values[0]}

您应该能够轻松获取值并使用echo产生预期的输出。

更新:包含空格的白名字段存在问题。您可以尝试使用此模式逐行阅读:

while read line; 
do 
  echo $line; 
done < <( sed 's/<[^>]*>//g' /tmp/xml | sed '/^$/d')

答案 2 :(得分:0)

我会使用XQuery。感觉比XSLT更清晰。例如,使用我自己的XQuery interpreter(遗憾的是无法直接更新文件):

xidel --xml file2.xml --xquery '<ITEMS>{ITEMS/EVENT, doc("file1.xml")/ITEMS/EVENT/<EVENT><sign codice="{codpal}" pro="{programming}" id="{idCategory}" data="{date}"  /></EVENT>}</ITEMS>' > file2.new.xml
mv file2.new.xml file2.xml