gpt4 book ai didi

xml - 如何使用 xmlstarlet 插入现有的 xml 行

转载 作者:太空狗 更新时间:2023-10-29 12:15:01 31 4
gpt4 key购买 nike

我已经尝试搜索和阅读 xmlstarlet 帮助,如果我错过了答案,我深表歉意。我正在尝试采用现有的 XML 行并将其添加到使用 xmlstarlet 的 xml 文件中。即:

我有这样一行:<somedata name="aname" val="aval"/>

和一个类似于

的xml文件
<xml>
<subxml/>
</xml>

我希望输出是

<xml>
<subxml>
<somedata name="aname" val="aval"/>
</subxml>
</xml>

我还没有找到一种方法来回显我拥有的行并插入它,或者无需解析该行然后使用所有 xmlstarlet 编辑选项插入的其他方法(-n -v .. .).

在此先感谢您的帮助!

最佳答案

解决方法,使用 xmlstarlet 插入原始 XML 代码

  1. 使用 xmlstarlet 插入一个临时的 xml 节点
  2. 用 sed 替换该节点

临时节点在文件中必须是唯一的

file="input.xml" # will be modified in-place
xpath="/xml/subxml"
raw_xml='<foo type="asdf">pipe||||amp&&&&back\0\1\2\3</foo>'
esc_xml=$(echo "$raw_xml" | sed -e 's/[\/&]/\\&/g' | sed ':a;N;$!ba;s,\n,\\n,g')
temp=node$(date | sha256sum | cut -d' ' -f1)
xmlstarlet ed -L -s "$xpath" -t elem -n $temp "$file"
sed -i "s|<$temp/>|$esc_xml|" "$file"

这将使用一个临时节点 <node6044c3e85d715b423cafd58c17bbda2748d7b51d9481b11c792a5313ddced18b/>这应该是安全的碰撞

相关:https://superuser.com/questions/422459/substitution-in-text-file-without-regular-expressions/

关于xml - 如何使用 xmlstarlet 插入现有的 xml 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28660018/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com