尝试将元素的值获取为tcl变量 示例stats.xml文件
<account>
<name>abc</name>
<number>1224.3414</number>
</account>
在上述情况下,尝试仅提取一个元素值名称或数字
set value
regexp "<$number>(.*?)</number>" stats.xml value
答案 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