用文件theme.xml的内容替换文件main.xml中 之间的多行xml文本

问题描述 投票:-2回答:1

我有一个文件main.xml

  </placement>
  <theme>
    <name>chrome</name>
    <titleLayout>CLM</titleLayout>
    <keepBorder>no</keepBorder>
    <font place="ActiveWindow">
      <name>scientifica</name>
    </font>
  </theme>
  <desktops>

和第二个文件theme.xml

    <name>obdark</name>
    <titleLayout>LIMC</titleLayout>
    <keepBorder>no</keepBorder>
    <font place="ActiveWindow">
      <name>Noto Sans</name>
    </font>

我想用<theme></theme>的内容替换main.xmltheme.xml之间的文本,我该怎么办?

xml awk sed xmlstarlet
1个回答
0
投票

假设您的XML将像下面的[[格式正确],则可以使用此简单的命令:

xmlstarlet ed -u "/desktops/theme" -v "$(cat theme.xml)" a.xml | xmlstarlet unesc | xmlstarlet fo
XML输入:

<desktops> <theme> <name>chrome</name> <titleLayout>CLM</titleLayout> <keepBorder>no</keepBorder> <font place="ActiveWindow"> <name>scientifica</name> </font> </theme> </desktops>

XML输出(在xmlstarlet命令应用后:]

<?xml version="1.0"?> <desktops> <theme> <name>obdark</name> <titleLayout>LIMC</titleLayout> <keepBorder>no</keepBorder> <font place="ActiveWindow"> <name>Noto Sans</name> </font> </theme> </desktops>

此方法的局限性在于您不能在XML中使用XML实体,因为它们会由unesc命令进行转换。    
© www.soinside.com 2019 - 2024. All rights reserved.