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

如何在tcl中获取xml元素值?,tcl,Tcl,尝试将元素的值获取到tcl变量 示例stats.xml文件 <account> <name>abc</name> <number>1224.3414</number> </account> abc 1224.3414 在上述情况下,尝试只提取一个元素值,即name或number set value regexp "<$number>(.*?)</number>" stats.xm

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

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

abc
1224.3414
在上述情况下,尝试只提取一个元素值,即name或number

set value
regexp "<$number>(.*?)</number>" stats.xml value
设置值
regexp“(.*)”stats.xml值

通常最好直接转到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

文件:

通常最好直接转到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

文件:

正如@Peter所说,最好使用时差。试图用regexp解析xml将导致痛苦的世界。(见附件)

也就是说,如果您坚持这样做,那么这些就是您需要对脚本进行的更改

首先,您需要将文件的内容放入一个变量中。您正在文件名上使用regexp

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

正如@Peter所说,最好使用tdom。试图用regexp解析xml将导致痛苦的世界。(见附件)

也就是说,如果您坚持这样做,那么这些就是您需要对脚本进行的更改

首先,您需要将文件的内容放入一个变量中。您正在文件名上使用regexp

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

请编辑问题以添加您用于尝试此操作的代码。更新..此处非常新请编辑问题以添加您用于尝试此操作的代码。更新..此处非常新不使用tdom是否可以执行此操作?确定。只是写起来有点难,可能速度较慢,更容易出错。如果你坚持在没有tdom的情况下写,请看我的答案。但是您确实应该使用tdom(或类似的),如果tdom作为二进制扩展对您来说不可行,您可以测试TclXML,它有一个只有tcl版本的xml解析器。速度可能是个问题,这取决于数据大小。在没有tdom的情况下是否可以做到这一点?当然可以。只是写起来有点难,可能速度较慢,更容易出错。如果你坚持在没有tdom的情况下写,请看我的答案。但是您确实应该使用tdom(或类似的),如果tdom作为二进制扩展对您来说不可行,您可以测试TclXML,它有一个只有tcl版本的xml解析器。速度可能是个问题,具体取决于数据大小