繁体   English   中英

如何使用tcl更改XML标签的值

[英]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.

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