誰かが私を正しい方向に向けることができることを願っています。
私は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() " 内部から呼び出されます "set node [$ root selectNodes" / s:Envelope / s:Body / u:InfoResponse / MyData / text()] "
XMLを変更し、要素の名前をEnvelope、Bodyなどに変更すると、正常に機能します(ただし、これはデータフィードであるため、可能な解決策ではありません)。XML解析スキルが少し不足していることを告白する必要があります。
私はオンラインのxQueryツールを試しましたが、それは問題なく解析されました。名前空間とTCLに関係があるのではないかと思いますが、どうしたらよいかわかりません。
基本的に、このビットのデータからプルバックする必要が<MyData>
あるだけで、応答は1つだけなので、xQueryの代わりにもっと簡単な方法があるかもしれません。プルバックする必要がある他のデータのいくつかには複数のデータがあるので、それを行う方法を知っておくと便利です。