如何将一个XML文件插入到另一个XML文件的指定标记位置
目标文件和源文件均为XML类型文件。
使用sed实现需求时遇到了困难,因为该工具对特殊字符的兼容性不佳,而这两个XML文件中包含大量特殊字符。
调研发现可以使用awk实现该功能,但对awk的使用非常不熟悉,因此寻求解决方案。
补充说明
带标记位置的主XML文件内容
<?xml version="1.0" encoding="utf-8"?> <ip> <?processing instructions?> <lista> <!--> EKOLOGIA +5 <--> <kategoria nazwa="EKO" thumb="/home/xvision/ip/swf/EKO/eko.png"> </kategoria> <!-- KONIEC PAKIETU <--> <!--temp--> </lista> </ip>
需要插入的XML文件内容
<!--> PAKIET FUN 50 GIER <--> <kategoria nazwa="EDU" thumb="/home/xvision/ip/swf/EDU/edu.png"> </kategoria>
期望的最终文件效果
<?xml version="1.0" encoding="utf-8"?> <ip> <?processing instructions?> <lista> <!--> EKOLOGIA +5 <--> <kategoria nazwa="EKO" thumb="/home/xvision/ip/swf/EKO/eko.png"> </kategoria> <!-- KONIEC PAKIETU <--> <!--> PAKIET FUN 50 GIER <--> <kategoria nazwa="EDU" thumb="/home/xvision/ip/swf/EDU/edu.png"> </kategoria> </lista> </ip>
解决方案
你可以直接使用以下awk命令完成内容插入,该方案会逐行原封不动输出内容,不会受XML特殊字符影响:
awk ' # 匹配到主文件里的临时标记行 /<!--temp-->/{ # 读取待插入文件的所有内容并输出 while((getline line < "insert.xml") > 0){ print line } close("insert.xml") # 跳过原临时标记行 next } # 其余行正常输出 1' main.xml > final.xml
使用说明:将命令中的main.xml替换为你的主XML文件路径,insert.xml替换为待插入的XML文件路径,执行命令后生成的final.xml就是符合预期的最终文件。
内容的提问来源于stack exchange,提问作者kamil_debski
相关产品推荐
相关产品推荐

