希望有人能指出我正确的方向。
我对 TCL 比较陌生,但与我使用的其他语言(Javascript/VbScript/C#)相比,示例代码非常缺乏。
代码:
package require http
package require tdom
set html "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:InfoResponse xmlns:u=\"urn:schemas-upnp-org:service:Transport:1\"><MyData>This is my final bit of data</MyData></u:InfoResponse></s:Body></s:Envelope>"
set doc [dom parse $html]
set root [$doc documentElement]
set node [$root selectNodes "/s:Envelope/s:Body/u:InfoResponse/MyData/text()"]
puts [$node data]
错误是:
前缀无法解析 在执行时 "$root selectNodes "/s:Envelope/s:Body/u:InfoResponse/MyData/text()" 从内部调用 "设置节点 [$root selectNodes "/s:Envelope/s:Body/u:InfoResponse/MyData/text()]"
如果我更改 XML 并将元素重命名为 Envelope、Body 等,它工作正常(但不是可能的解决方案,因为这是一个数据馈送)。我不得不承认我的 XML 解析技巧有点欠缺。
我尝试了一个在线 xQuery 工具,它可以解析它。我猜它可能与命名空间和 TCL 有关,但不知道该怎么做..
我基本上只需要<MyData>
从这部分数据中提取出来,并且只会有一个响应,所以可能有一种更简单的方法而不是 xQuery?我需要撤回的其他一些数据将有多个,所以很高兴知道如何做到这一点!