【问题标题】:Read property file and Insert xml tag using shell script使用 shell 脚本读取属性文件并插入 xml 标签
【发布时间】:2020-12-05 08:18:47
【问题描述】:

我有一个属性文件如下,

Name=sample
TagName=Test1
TagType=P

Name=sample1
TagName=Test2
TagType=Y

我有一个如下的xml文件,

 <?xml version="1.0" encoding="UTF-8"?>
  <root>
  </root>

需要追加如下,

   <?xml version="1.0" encoding="UTF-8"?>
  <root>
    <sub>
      <TagName>Test1</TagName>
      <TagType>P</TagType>
    </sub>
    <sub>
      <TagName>Test2</TagName>
     <TagType>Y</TagType>
    </sub>
  </root>

谁能帮我在 shell 脚本中使用 sed 或 awk 命令插入 xml 文件...

在此先感谢..

【问题讨论】:

  • 您搜索了什么,找到了什么?您尝试过什么,它是如何失败的?
  • 我建议使用 XML/HTML 解析器(例如 xmlstarlet)。
  • 我们鼓励提问者展示他们迄今为止为自己解决问题所做的尝试。
  • 如果您的 xml 文件确实包含这些内容,那么当您需要生成所有其他 xml 结构时,拥有它有什么意义?

标签: xml bash awk sed xmlstarlet


【解决方案1】:

使用bashxmlstarlet。我在您的 xml 文件中删除了 &lt;?xml 之前的空格。

#!/bin/bash

file="file.xml"
prop="property.txt"

while IFS="=" read -r key value; do
  [[ "$key" == "Name" ]]    && xmlstarlet edit -L --subnode '//root'             --type elem -n "sub" "$file"
  [[ "$key" == "TagName" ]] && xmlstarlet edit -L --subnode '//root/sub[last()]' --type elem -n "TagName" --value "$value" "$file"
  [[ "$key" == "TagType" ]] && xmlstarlet edit -L --subnode '//root/sub[last()]' --type elem -n "TagType" --value "$value" "$file"
done < "$prop"

输出到file.xml:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <sub>
    <TagName>Test1</TagName>
    <TagType>P</TagType>
  </sub>
  <sub>
    <TagName>Test2</TagName>
    <TagType>Y</TagType>
  </sub>
</root>

请参阅:xmlstarlet edit 快速了解语法概览。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多