アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは

.vbsのスクリプトを書いています。XMLファイルから値を取得する内容なのですが

XMLファイルの一部:
<tag>This is the text I want to get. </tag>

.vbsスクリプトの一部 (途中を省いています):

Set objXML = CreateObject("MSXML2.DOMDocument")
result = objXML.Load(fPath)
Set nodeRoot = objXML.DocumentElement
Set elem = nodeRoot.getElementsByTagName("tag")
bar = elem(0).Text

上記のような方法で取得したテキストデータは、実際のXMLファイルにあった前後のスペースが取得できません。XMLファイル内では「get. 」のようにピリオドの後にスペースがあるのですが、スクリプトで取得したデータは末尾にスペースがありません(「get.」で終わる)。先頭にスペースがある場合も同様の挙動をします。

勝手にトリムされずに、XMLタグの中にあるテキストのままを取得するにはどうしたらよいでしょうか。
.Value, .innerText, .innerContent と記述するとサポートされないとのことでエラーが出ます。
elemのNodeTypeは1で、要素のようです。
Xpathによる要素取得もしてみましたが、結果は同じでした。
最終手段として、xml読み込み前に、xmlファイルの「スペース+</tag>」のスペースを別の文字に置き換えて、読み込み後にその文字をスペースに戻す、という方法でしょうか。
もっとスマートにできる方法がある気がしますし、この仕様は多くの人が困っているのではないかと思います。

アドバイスお願いします。

A 回答 (1件)

elem(0) の .Text ではなく、


.ChildNodes から .NodeType が Text であるすべての子ノードを抜き出し、
ノードの .Value を結合すれば正しい値が取れると思います。

場合によっては CDATASection も対象に入れましょう
    • good
    • 0
この回答へのお礼

ありがとうございます。

今ひとつ飲み込めませんでした。
elemのChildNodesからNodeTypeがText (=1)のものを抜き出して、それらのノードのValueを結合する、ということでしょうか?

まず、.Value と記述するとサポートされないというエラーが出てきてしまいます。
elemの中には1センテンスのテキストデータしか入っていません。

elemの1つ上の階層の要素を取得して、そのChildNodes (=elemを含む)に対して操作する、ということなのでしょうか?

もしよろしければ、考え方のヒントになるコード(一部で結構です)を教えていただけますでしょうか?

お礼日時:2016/11/20 21:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!