向 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
元素。
我需要在 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
元素。