繁体   English   中英

批量修改XML文件

[英]Modify XML file in batch

好的,所以我对使用 For /F 不是很熟悉。 如果文件是 static 并且有一组我可以跳过然后从中提取数据的行,我可以修改它。 我目前正在尝试修改 an.XML 文件。 该文件将具有不同的行数,但始终具有以下内容

</SyncWindow> </AutoSyncWindows> <SyncServiceConnections /> <DaysToRetainRecordedData>90</DaysToRetainRecordedData> <SyncRestartRequired>false</SyncRestartRequired> - <LastGroupsSynced>

<DaysToRetainRecordedData>90</DaysToRetainRecordedData>的值可能不同,例如<DaysToRetainRecordedData>30</DaysToRetainRecordedData>

使用令牌,什么是最有效的方法来搜索该行的 .XML 文件并用以下<DaysToRetainRecordedData>0</DaysToRetainRecordedData>覆盖它

我无法覆盖整个 .XML 文件,因为它们具有因机器而异的唯一服务器密钥。所以我需要能够找到该行并将值编辑为 0。有什么想法吗? 如果 For /F 不是到达 go 的最有效方式,我可以根据需要转到 VBS。 但它必须从纯 shellcode 调用,并且会使事情变得有点复杂。

最优雅,灵活和安全的方法是下载msxsl.exe然后使用一个小的XSLT样式表来仅修改XML中所需的值:

<!-- DaysToRetainRecordedData.xsl -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:param name="newValue" select="0" />

  <!-- this template copies your input XML unchanged -->
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*" />
    </xsl:copy>
  </xsl:template>

  <!-- this template changes one single value -->
  <xsl:template match="DaysToRetainRecordedData/text()">
    <xsl:value-of select="$newValue" />
  </xsl:template>
</xsl:stylesheet>

在命令行上调用:

msxsl.exe input.xml DaysToRetainRecordedData.xsl –o output.xml newValue=0

命令行参数newValue将显示在XSL程序中。

我有一个类似的应用程序,但不是用固定值替换值,而是需要用 1.25* 值替换它。

有人可以帮我修改代码吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM