[英]how to change the value of a XML tag using tcl
我有一个XML文件,如下所示:
<ii:variable name="SERVER_IP" type="string" value="10.39.1.105:5005" />
<ii:variable name="DEVICE_WAN" type="string" value="em1" />
<ii:variable name="DEVICE_LAN" type="string" value="eth1" />
<ii:variable name="NUT_WAN_MAC" type="macaddress" value="00:10:18:DE:66:43" />
<ii:variable name="NUT_LAN_MAC" type="macaddress" value="00:10:18:DE:66:45" />
<ii:variable name="NUT_WAN_ID" type="ipv6interfaceid" value="0210:18FF:FEDE:6643" />
<ii:variable name="NUT_LAN_ID" type="ipv6interfaceid" value="0210:18FF:FEDE:6645" />
<ii:variable name="NUT_LAN_GLOBAL_ID" type="ipv6interfaceid" value="0210:18FF:FEDE:6645" />
<ii:variable name="NUT_LAN_ULA_PREFIX" type="ipv6address" value="FD00::" />
<ii:variable name="CONFIG_DIR" type="string" value="/cygdrive/c/Intact/33843evg/" />
<ii:variable name="DAD_TIME" type="integer" value="240000" />
<ii:variable name="DHCP_SOL_WAIT" type="integer" value="10000" />
<ii:variable name="DHCP_LAN_SOL" type="integer" value="5000" />
现在,我想更改某些变量“名称”字段的“值”字段,例如ii:variable name =“ NUT_WAN_MAC,ii:variable name =” NUT_LAN_MAC等)。 使用TCL脚本的最佳方法是什么?
tdom软件包擅长于此类事情:
package require tdom
# Parse the XML into a DOM tree
set doc [dom parse $thexml]
# Note that we've got a (multi-line) list of the changes to make
# and that I have *NO* idea what you want to set things to!
foreach {name setTo} {
NUT_WAN_MAC "the quick brown fox"
NUT_LAN_MAC "the lazy dogs"
} {
# using a loop in case there are several nodes with that name :-)
foreach node [$doc selectNodes [format {//ii:variable[@name="%s"]} $name]] {
$node setAttribute value $setTo
}
}
# Convert back into XML; you might want to experiment with the -indent option
set thechangedxml [$doc asXML]
您可能需要尝试为XPath选择合适的东西,以便在selectNodes
方法中使用它来选择要修改的节点。 这些事情并不总是琐碎的。 如果您正在使用包含[
过滤器]
XPath,请记住将整个表达式括起来以防止重复解释,而format
命令可以帮助您保持理智。
是的,如果需要,您可以使其变得更加复杂。 (我省略了用于读写文件的代码。这很标准。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.