
こんにちは
.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件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
elem(0) の .Text ではなく、
.ChildNodes から .NodeType が Text であるすべての子ノードを抜き出し、
ノードの .Value を結合すれば正しい値が取れると思います。
場合によっては CDATASection も対象に入れましょう
ありがとうございます。
今ひとつ飲み込めませんでした。
elemのChildNodesからNodeTypeがText (=1)のものを抜き出して、それらのノードのValueを結合する、ということでしょうか?
まず、.Value と記述するとサポートされないというエラーが出てきてしまいます。
elemの中には1センテンスのテキストデータしか入っていません。
elemの1つ上の階層の要素を取得して、そのChildNodes (=elemを含む)に対して操作する、ということなのでしょうか?
もしよろしければ、考え方のヒントになるコード(一部で結構です)を教えていただけますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- その他(プログラミング・Web制作) バッチファイルでPCのモデル名を取得したい 1 2022/03/31 10:58
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
新しいノード
-
ルート要素ノードが2個ある場合?
-
CPUの考え方を教えてください ...
-
多分木のプログラミングについて
-
VC#のTreeViewコントロールにつ...
-
C++Builder 6でツリービュー(...
-
ノードとは
-
C#でTreeViewのCheckBoxのサイ...
-
グラフ色塗り問題のプログラミ...
-
JSPでXMLのデータ表示が...
-
同じタグ名の項目取得
-
vbsのDOMDocumentで要素のText...
-
TreeView の初期表示について
-
VB6.0ツリービューについて
-
SNMP リンクダウンとノードダ...
-
東芝のDynabookなのですがアン...
-
XML同じ名前の要素を自動で集約...
-
XMLデータを動的に使用する
-
formタグと、imgObj.src[=strURL]
-
メモリのセクションに関して
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CPUの考え方を教えてください ...
-
SNMP リンクダウンとノードダ...
-
ルート要素ノードが2個ある場合?
-
複数のマックPCによる数値計算...
-
同じタグ名の項目取得
-
C#でTreeViewのCheckBoxのサイ...
-
昔Winnyってありましたけど、あ...
-
TreeView の初期表示について
-
あるノードリストに、特定の名...
-
TreeViewに重複する値をセット
-
(VB.NET)TreeViewのノード文...
-
ツリービューの使い方が・・・
-
ノードとは
-
C# TreeView 効率良いノード追...
-
【C#】XPathを使用してのノード...
-
4色定理はなぜグラフ理論で証...
-
ツリービューのノードをダブル...
-
TreeViewで複数ノードの選択は...
-
vbsのDOMDocumentで要素のText...
-
各ノードの行数取得
おすすめ情報