3

我有以下使用 tcl 脚本语言的 xml 文件。

<workarea>
  <poller name="Poller1">
    <pollerAttribute loc="c:\abc" username="abc" password="xxx">
      <value>123</value>
    </pollerAttribute>
  </poller>
  <poller name="Poller2">
    <pollerAttribute loc="c:\def" username="def" password="xxx">
      <value>345</value>
    </pollerAttribute>
  </poller>
  .....
</workarea>

在这里,我想用 Poller 名称阅读每个标签,然后password="xxx"为此更改。我是 tcl 脚本语言的新手。任何帮助对我来说都会很棒。提前感谢。

4

1 回答 1

7

到目前为止,使用 Tcl 执行此操作的最简单方法是使用tDOM来操作 XML。您可以使用 XPath 表达式来选择password要更改其属性的元素,然后您可以遍历这些节点并根据需要更改它们。最后,您需要记住,更改内存中的文档并不是更改磁盘上的文档;读取和写入序列化文档也是重要的步骤。

package require tdom

set filename "thefile.xml"
set xpath {//pollerAttribute[@password]}

# Read in
set f [open $filename]
set doc [dom parse [read $f]]
close $f
set root [$doc documentElement]

# Do the update of the in-memory doc
foreach pollerAttr [$root selectNodes $xpath] {
    $pollerAttr setAttribute password "theNewPassword"
}

# Write out (you might or might not want the -doctypeDeclaration option)
set f [open $filename "w"]
$doc asXML -channel $f -doctypeDeclaration true
close $f

就是这样。(您可能需要更加小心如何选择具有正确password属性的元素,并以更复杂的方式提供替换密码,但这些都是技巧。)

于 2013-04-08T19:28:36.163 回答