0

我需要在 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中,我已将我想要添加的内容插入到共享标签中,但它不起作用,它向我显示了 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
4

1 回答 1

1

使用 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.xmlsmb

于 2022-02-24T08:12:48.587 回答