如何在tcl中获取xml元素值?

时间:2018-03-16 17:22:30

标签: tcl

尝试将元素的值获取为tcl变量 示例stats.xml文件

<account>
    <name>abc</name>
    <number>1224.3414</number>
</account>

在上述情况下,尝试仅提取一个元素值名称或数字

set value
regexp "<$number>(.*?)</number>" stats.xml value

2 个答案:

答案 0 :(得分:2)

通常最好直接转到DOM处理实用程序,例如tdom

package require tdom
set f [open stats.xml]
set xml [read $f]
set doc [dom parse $xml]
$doc selectNodes {string(//number)}

最后一行返回值1224.3414

文档: tdom (package)

答案 1 :(得分:2)

正如@Peter所说,最好使用tdom。试图用正则表达式解析xml将导致一个痛苦的世界。 (见Why is it such a bad idea to parse XML with regex?

也就是说,如果你坚持这样做,那么这些就是你脚本所需的改变。

首先,您需要将文件的内容放入变量中。您正在使用文件名的正则表达式。

% set fp [open stats.xml]
file5
% set contents [read $fp]
<account>
    <name>abc</name>
    <number>1224.3414</number>
</account>
% close $fp

您的模式中也有错误(number前面的$符号)。此外,value将包含整个匹配项。您将需要一个额外的变量(下面为v),以获得第一个匹配,即数字。请执行以下操作:

% regexp "<number>(.*?)</number>" $contents value v
1
% puts $v
1224.3414