向 xml 添加大量标签的最佳方法?

Best way to add large number of tags to an xml?

我需要在 xml 文件中添加大量标签。该文件是 Openmediavault 系统 (Debian) config.xml 文件。

具体来说,我需要通过命令行通过 SMB 共享一个硬盘。我考虑过通过 SSH 命令或任务计划程序中的脚本来完成。但是我要补充的内容是相当广泛的。我该怎么做?有没有办法使用 xmlstarlet 来做到这一点?我还没有找到添加这么多标签的简单方法。看看你能不能给我个主意。

我必须将所有这些标签放在 <smb></smb> 标签中

<share>
          <uuid>0be7e06a-a888-436d-8088-5ec63963vf5</uuid>
          <enable>1</enable>
          <sharedfolderref>626db680-b317-42b9-a312-d30392bd5re4</sharedfolderref>
          <comment></comment>
          <guest>no</guest>
          <readonly>0</readonly>
          <browseable>1</browseable>
          <recyclebin>1</recyclebin>
          <recyclemaxsize>0</recyclemaxsize>
          <recyclemaxage>0</recyclemaxage>
          <hidedotfiles>1</hidedotfiles>
          <inheritacls>1</inheritacls>
          <inheritpermissions>0</inheritpermissions>
          <easupport>0</easupport>
          <storedosattributes>0</storedosattributes>
          <hostsallow></hostsallow>
          <hostsdeny></hostsdeny>
          <audit>0</audit>
          <timemachine>0</timemachine>
          <extraoptions></extraoptions>
 </share>

我试过用这种方式添加,在subnode.xml我在shares标签里面插入了我想添加的东西,但是不行,它向我显示了 xml 的内容,但没有对其进行编辑。

sudo xmlstarlet ed -a "//config/services/smb/shares/" -t elem -n share \ -v "$(xmlstarlet sel -t -c '//share/*' subnode.xml)" config.xml\ | xmlstarlet unesc

使用 XSLT 转换:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">
  <xsl:template match="*">
    <xsl:copy><xsl:apply-templates/></xsl:copy>
  </xsl:template>
  <xsl:template match="smb">
    <smb><xsl:copy-of select="document('newContent.xml')"/></smb>
  </xsl:template<
</xsl:transform>

第一个模板规则是默认规则;它说复制元素不变。第二条规则覆盖 smb 元素:它表示将 newContent.xml 的副本插入 smb 元素。