从命令行更新 XML

从命令行更新 XML

我有几个应用程序以 XML 格式存储配置文件。对于使用基于文本的配置的常规应用程序,我可以使用 perl、sed、awk 或上百万种工具中的任何一种轻松更新值。我正在寻找类似 XML 的东西,这将使我能够轻松可靠地执行以下操作:更新值、添加节点或删除节点。

常规文本解析似乎风险太大,因为我无法真正保证物理文件格式。

答案1

MS Powershell 中的 XML 解析比我个人遇到的任何其他语言或环境中见过的任何解析机制都更容易。

给定一些 XML 文件 (test.xml):

<root>
  <one>I like applesauce</one>
  <two>You sure bet I do!</two>
</root>

您可以从 Powershell 内部轻松访问、修改和附加 XML 文件的节点、值和属性。

# load XML file into local variable and cast as XML type.
$doc = [xml](Get-Content ./test.xml)

$doc.root.one                                   #echoes "I like applesauce"
$doc.root.one = "Who doesn't like applesauce?"  #replace inner text of <one> node

# create new node...
$newNode = $doc.CreateElement("three")
$newNode.set_InnerText("And don't you forget it!")

# ...and position it in the hierarchy
$doc.root.AppendChild($newNode)

# write results to disk
$doc.save("./testNew.xml")

文件 testNew.xml 中的结果 XML:

<root>
  <one>Who doesn't like applesauce?</one>
  <two>You sure bet I do!</two>
  <three>And don't you forget it!</three>
</root>

非常简单!尽情享受吧。

Powershell 是微软的新 shell,随 Windows Server 2008 和 Windows 7 一起提供,可供 XP/Vista/Server 2003(也许其他版本)免费下载。

一些有用的链接:
从其他来源生成 XML
向 XML 添加元素:
示例 1,MSDN PowerShell 博客
示例 2,PC-Pro(英国)

答案2

如果我理解正确,您正在寻找一种类似于 XML 的其他配置文件存储格式。但是,XML 的最大优势之一是它为您提供了结构化的数据格式。如果您违反 DTD 或“模板”,那么您的 XML 配置文件格式就会很差。过去,对于我自己的一些开发工作、脚本、程序和应用程序,我曾使用过 INI 格式的文件。虽然 INI 很容易解析,并且可以支持类似的添加、删除和更新,但我更喜欢 XML,因为它具有以下特点:

  1. 广泛使用
  2. 使用 Perl 的 XML::LibXML 轻松解析
  3. 比 INI 文件提供更大的灵活性
  4. 保持程序中严格格式和结构的最佳解决方案

相关内容