VBSのソースについてご教授下さい。

【作りたい機能】
XMLファイルを読み込み、任意のエレメントを検索するスクリプトを
VBSで作成しようとしています。

【状況】
ダイアログで表示させる方法はわかりました。
 参照
 http://www.atmarkit.co.jp/fxml/rensai/msxml01/ms …

01 : Dim objDOM, rtResult
02 :
03 : Set objDOM = WScript.CreateObject("MSXML2.DOMDocument")
04 : rtResult = objDOM.load("Sample.xml")
05 : If rtResult = True Then
06 : procDispDatas objDOM.childNodes
07 : End If
08 : Set objDOM = Nothing
09 :
10 : Sub procDispDatas(objNode)
11 : Dim obj
12 : For Each obj In objNode
13 : If obj.nodeType = 3 and obj.parentNode.nodeName = "title" Then
14 : MsgBox obj.parentNode.nodeName & " : " & obj.nodeValue
15 : End If
16 : If obj.hasChildNodes Then
17 : procDispDatas obj.childNodes
18 : End If
19 : Next
20 : End Sub

この結果をテキストファイルに出力させる方法に
困っております。

どこにどのように記載すればいいか
教えていただきたく存じます。

よろしくお願いいたします

このQ&Aに関連する最新のQ&A

A 回答 (1件)

手元にあったxmlファイルに合わせてprocDispDatasの方はアレンジさせていただいておりますが、


下記の様な感じでテキストファイルに書き出せると存じます。ご参考まで。

Dim objDOM, rtResult
Dim objFSO
Dim objTextStream

Set objDOM = WScript.CreateObject("MSXML2.DOMDocument")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

Set objTextStream = objFSO.CreateTextFile("C:\writeXmlValue.txt")
rtResult = objDOM.Load("C:\hoge.xml")
If rtResult = True Then
procDispDatas objDOM.childNodes
End If

Set objDOM = Nothing
objTextStream.Close
Set objTextStream = Nothing
Set objFSO = Nothing

Sub procDispDatas(objNode)
Dim obj
For Each obj In objNode
If obj.nodetype = 1 And obj.nodename = "??????" Then
objTextStream.writeline obj.Text
End If
If obj.hasChildNodes Then
procDispDatas obj.childNodes
End If
Next
End Sub
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBSでxmlの値を書き換えたい

お世話になります。
VBScriptで作成しています。

A.xmlの「sx」の値を全て200にしたいと思っております。
A.xmlの値を抜き取って、OKフォルダに複製する処理は
作ったのですが、どのようにして、sxを指定・その中の値を
変更するのかわかりません。

お手数ですが、ご教授お願いいたします。

------------------A.xml----------------------------
<?xml version="1.0" encoding="UTF-8"?>
<links>
<link id="0" name="" title="">
<sx>145</sx>
<sy>142</sy>
</link>
<link id="1" name="" title="">
<sx>495</sx>
<sy>142</sy>
</link>
<link id="2" name="" title="">
<sx>155</sx>
<sy>510</sy>
</link>
</links>

---------------------------------------------------
------スクリプト------------------------------------------------
Set Fso = CreateObject("Scripting.FileSystemObject")
Set objXML = CreateObject("Msxml2.DOMDocument.3.0")

' カレントディレクトリ
str = WScript.ScriptFullName
Set obj = Fso.GetFile( str )
Set obj = obj.ParentFolder
str = obj.Path

' XML を読み込み
objXML.load( str & "\A.xml" )

**********************************************************
'''ここで、sxの属性の値を変更したい
**********************************************************

' XML を保存
objXML.save( str & "\OK\A.xml" )
------------------------------------------------------

お世話になります。
VBScriptで作成しています。

A.xmlの「sx」の値を全て200にしたいと思っております。
A.xmlの値を抜き取って、OKフォルダに複製する処理は
作ったのですが、どのようにして、sxを指定・その中の値を
変更するのかわかりません。

お手数ですが、ご教授お願いいたします。

------------------A.xml----------------------------
<?xml version="1.0" encoding="UTF-8"?>
<links>
<link id="0" name="" title="">
<sx>145</sx>
<sy>142</sy>
</link>
<link id="1" name="" title...続きを読む

Aベストアンサー

SelectNodesを使って抽出を行えば いいと思いますよ

dim objList, objNode

Set objList = objXml.SelectNodes("//links/link/sx")
for each objNode in objList
  objNode.Text = "200"
next

といった具合です

Qxmlファイルから文字列の読み込み

VBScriptで、
xmlファイルから、あるタグに囲まれた文字列を抜き出して、別のテキストファイルに書き込みたいのですが、どうもうまくいきません。xmlファイル等はどのように開いたり、読み込んだりすればよいのでしょうか。どなたか教えて下さい。
よろしくお願いします。環境はWinNT4.0です。

Aベストアンサー

まず一般にXML文書を解析するときには、「XMLパーサ」というものを使用します。
VBScriptということなので、MicrosoftのXMLパーサであるMSXMLを使用すればよいでしょう。

XML文書をXMLパーサを使用して読みこむと、DOMのオブジェクトが出来ます。
DOMについては↓ここで。
http://www.atmarkit.co.jp/fxml/rensai/msxml01/msxml03.html
で、DOMから欲しい文字列を取ればよいです。

MSのサイトの参考資料も参考URLに示しておきます。

参考URL:http://www.microsoft.com/japan/developer/workshop/xml/articles/xml061598.asp

QVBScriptでXMLのデータを取得する方法

こんにちは。
プログラミング初心者です。どうぞよろしくお願いします。

VBSで下記のようなXMLのtitleをpub idごとに別々に分けて抽出したいのですが、どうしたらよいか全く分からない状態です。

<book>
<publisher>
<pub id="集英社"/>
</publisher>
<title>ドラゴンボール</title>
</book>
<book>
<publisher>
<pub id="講談社"/>
</publisher>
<title>はじめの一歩</title>
</book>
<book>
<publisher>
<pub id="集英社"/>
</publisher>
<title>ジョジョの奇妙な冒険</title>
</book>
<book>
<publisher>
<pub id="秋田書店"/>
</publisher>
<title>範馬刃牙</title>
</book>

下記のリンク先サイトにあったコードを試したのですが、titleが一緒くたに抽出されてしまい、別々に抽出ができません。pub idの階層が一つ深いのが原因だと思うのですが・・・どうしたらよいのか、さっぱり思いつきません。

http://www.atmarkit.co.jp/fxml/rensai/msxml01/msxml03.html

Dim objDOM, rtResult

Set objDOM = WScript.CreateObject("MSXML2.DOMDocument")
rtResult = objDOM.load("○○.xml")
If rtResult = True Then
procDispDatas objDOM.childNodes
End If
Set objDOM = Nothing

Sub procDispDatas(objNode)
Dim obj
For Each obj In objNode
If obj.nodeType = 3 and obj.parentNode.nodeName = "title" Then
MsgBox obj.parentNode.nodeName & " : " & obj.nodeValue
End If
If obj.hasChildNodes Then
procDispDatas obj.childNodes
End If
Next
End Sub

どうかアドバイスをよろしくお願いいたします!

こんにちは。
プログラミング初心者です。どうぞよろしくお願いします。

VBSで下記のようなXMLのtitleをpub idごとに別々に分けて抽出したいのですが、どうしたらよいか全く分からない状態です。

<book>
<publisher>
<pub id="集英社"/>
</publisher>
<title>ドラゴンボール</title>
</book>
<book>
<publisher>
<pub id="講談社"/>
</publisher>
<title>はじめの一歩</title>
</book>
<book>
<publisher>
<pub id="集英社"/>
</publisher>
<title>ジョジョの奇妙な冒険</title>
</book>
...続きを読む

Aベストアンサー

XMLファイルのルートノードを追加したほうがいいように思います
出発点のノードが1つでそこから枝分かれするようにします

今回なら <book>タグの外側に<books>タグを追加します
<books>
<book>
<publisher>
<pub id="集英社"/>
</publisher>
<title>ドラゴンボール</title>
</book>
<book>
<publisher>
<pub id="講談社"/>
</publisher>
<title>はじめの一歩</title>
</book>
<book>
<publisher>
<pub id="集英社"/>
</publisher>
<title>ジョジョの奇妙な冒険</title>
</book>
<book>
<publisher>
<pub id="秋田書店"/>
</publisher>
<title>範馬刃牙</title>
</book>
</books>
と行った具合でやってみましょう

また先頭に XMLのバージョンやエンコード方式も追加した方がいいように思います
<?xml version="1.0" encoding="shift_jis" ?>
といった具合です

XMLファイルのルートノードを追加したほうがいいように思います
出発点のノードが1つでそこから枝分かれするようにします

今回なら <book>タグの外側に<books>タグを追加します
<books>
<book>
<publisher>
<pub id="集英社"/>
</publisher>
<title>ドラゴンボール</title>
</book>
<book>
<publisher>
<pub id="講談社"/>
</publisher>
<title>はじめの一歩</title>
</book>
<book>
<publisher>
<pub id="集英社"/>
</publisher>
<title>ジョジョの奇妙な冒険</title>
</book>
<book>
<...続きを読む

QVBSで"をエスケープする文字は?

VBSで"をエスケープする文字はなんでしょうか?

Aベストアンサー

エスケープといった考えが VBSではなかったように思います

"をあらわすには "で括る必要が生じます
たとえば "abc" といった内容なら """abc""" といったリテラルになります
一番外側の "のペアが 文字列としての"になります

"ab"cが欲しいなら """ab""c"
a"bc"が欲しいなら "a""bc"""
a"b"cがほしいなら "a""b""c"
といった具合になります

QExcel-VBAでXMLの複数ノードの取り出し

すみません、いつも、いろいろな方に助けて頂いていますが、また、初歩的な質問をさせて頂きます。
Excel2007のVBAでXMLの扱いが良くわかっておりません。
以下のプログラムで複数ItemのASINを出力したいのですが、うまくいきません。
XMLがきちんと取得できているのはWireSharkでキャプチャして確認できております。
VBAで表示出力するのがうまくいきません。ご教授方よろしくお願いします。
selectSingleNodeで一つの場合はうまく取り出せています。複数ノードの場合にSelectNodesの使い方に問題がありますでしょうか?
型の宣言などに誤りがありますでしょうか?

また、基本的なことですが、MSXML2を使おうとしたら、Excel2007で使えませんでした。
XMLDOMは、サポート切れ?で古いので、MSXML2を使うのが良いとWebで見ました。
DLLなどが必要な気がしているのですが、よくわかっていないのでご教授頂きたいです。

すみませんが、よろしくお願いします。

*****VBAプログラム(抜粋)******
Dim xml As Object, xmlItems As Object, objPrice As Object
'XML オブジェクト作成
Set xml = CreateObject("Microsoft.XMLDOM")
xml.async = False
xml.Load URI

Set xmlItems = xml.SelectNodes("ItemLookupResponse/Items/Item")

For Each objPrice In xmlItems
' ASIN
If Not objPrice.SelectSingleNode("ASIN") Is Nothing Then
curWS.Cells(rowIndex, ASINCol) = objPrice.SelectSingleNode("ASIN").text
End If
Next


*****取得したXML(抜粋)******
<ItemSearchResponse >
<Items>
<Item>
<ASIN>111</ASIN>
</Item>
<Item>
<ASIN>222</ASIN>
</Item>
<Item>
<ASIN>333</ASIN>
</Item>
</Items>
</ItemSearchResponse>

すみません、いつも、いろいろな方に助けて頂いていますが、また、初歩的な質問をさせて頂きます。
Excel2007のVBAでXMLの扱いが良くわかっておりません。
以下のプログラムで複数ItemのASINを出力したいのですが、うまくいきません。
XMLがきちんと取得できているのはWireSharkでキャプチャして確認できております。
VBAで表示出力するのがうまくいきません。ご教授方よろしくお願いします。
selectSingleNodeで一つの場合はうまく取り出せています。複数ノードの場合にSelectNodesの使い方に問題がありますでし...続きを読む

Aベストアンサー

とりあえず下記で111,222,333が取得できました。ご参考まで。
当方、Windows7Home64bit/xl2010です。
環境は異なりますが、MSXML3あたりでも動くコードだと思います。
コード中XPATHはItemLookupResponseなのに、テストデータの方はItemSearchResponseになっていますが大丈夫ですか?

'MSXML6に参照設定
Sub test()
Dim XML As New MSXML2.DOMDocument60
Dim xmlItems As IXMLDOMNodeList
Dim objPrice As IXMLDOMNode

XML.async = False
' XML.validateOnParse = False
' XML.resolveExternals = False
' XML.preserveWhiteSpace = True

XML.Load GetDesktopPath & "\test.xml" 'お示しのデータをコピペして保存
Set xmlItems = XML.SelectNodes("ItemSearchResponse/Items/Item")
For Each objPrice In xmlItems
' ASIN
If Not objPrice.SelectSingleNode("ASIN") Is Nothing Then
Debug.Print objPrice.SelectSingleNode("ASIN").Text
End If
Next

'直接ASINまで指定しても良いと思うが...
' Set xmlItems = XML.SelectNodes("ItemSearchResponse/Items/Item/ASIN")
' If xmlItems.Length > 0 Then
' For Each objPrice In xmlItems
' Debug.Print objPrice.Text
' Next
' End If

Set XML = Nothing
End Sub

Private Function GetDesktopPath() As String
Dim wScriptHost As Object, strInitDir As String
Set wScriptHost = CreateObject("Wscript.Shell")
GetDesktopPath = wScriptHost.SpecialFolders("Desktop")
Set wScriptHost = Nothing
End Function

とりあえず下記で111,222,333が取得できました。ご参考まで。
当方、Windows7Home64bit/xl2010です。
環境は異なりますが、MSXML3あたりでも動くコードだと思います。
コード中XPATHはItemLookupResponseなのに、テストデータの方はItemSearchResponseになっていますが大丈夫ですか?

'MSXML6に参照設定
Sub test()
Dim XML As New MSXML2.DOMDocument60
Dim xmlItems As IXMLDOMNodeList
Dim objPrice As IXMLDOMNode

XML.async = False
' XML.validateOnParse = False
' XML.resolv...続きを読む

QVBS実行時エラー オブジェクトがありません 回避方法について

タイトルの件ですが、現在CSVよりIDとPWを読み込み、Webページに自動ログインできるVBSを作成しております。
ネットの情報を頼りに下記ソースを作成し、自動ログインできるところまでは達成しました。
しかしながら、一回目の実行時はいいのですが、二回目以降時間を置かずにVBSを起動すると
エラーが発生します。(IEは起動し、ログイン自体は出来ます)
本エラーの回避方法をご教授願えませんでしょうか。

エラーの発生場所は objIE.Document.getElementsByName("username")(0).Value = SiteID
あたりだとは思うのですが、何が原因かがわからなく。。

○エラーメッセージ
エラー:オブジェクトがありません。:'objIE.Document.getElementByName(...)(...)'
コード:800A01A8
ソース:Microsoft VBScript 実行時エラー

○コード
'Option Explicit

Dim tmp 'CSV格納
Dim tmp2 'CSV分割
Dim SiteArray(10) 'ID,PW,URL格納
Dim SiteURL 'URL格納
Dim SiteID 'ID格納
Dim SitePW 'PW格納

Dim i
dim objFSO
dim stmCsvFile

'URL,ID,PWをCSVより読込
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set stmCsvFile = objFSO.OpenTextFile("C:\Users\***\Desktop\login.csv")

Do Until stmCsvFile.AtEndOfLine = True
tmp = stmCsvFile.readline
tmp2 = Split(tmp, ",")
SiteArray(i) = tmp2(1)
i = i + 1
Loop

stmcsvfile.Close


'URL,ID,PWを格納
SiteID = SiteArray(1)
SitePW = SiteArray(2)
SiteURL = SiteArray(0)

'---------- ひらく

Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate SiteURL
Do Until objIE.busy = False And objIE.readyState = 4 : Loop '待ち合わせ

'---------- ID/PASSの入力

objIE.Document.getElementsByName("username")(0).Value = SiteID
objIE.Document.getElementsByName("password")(0).Value = SitePW

'---------- SUBMIT

objIE.Document.getElementsByName("login_form")(0).Submit
Do Until objIE.busy = False And objIE.readyState = 4 : Loop '待ち合わせ

'----------

宜しくお願い致します。

タイトルの件ですが、現在CSVよりIDとPWを読み込み、Webページに自動ログインできるVBSを作成しております。
ネットの情報を頼りに下記ソースを作成し、自動ログインできるところまでは達成しました。
しかしながら、一回目の実行時はいいのですが、二回目以降時間を置かずにVBSを起動すると
エラーが発生します。(IEは起動し、ログイン自体は出来ます)
本エラーの回避方法をご教授願えませんでしょうか。

エラーの発生場所は objIE.Document.getElementsByName("username")(0).Value = SiteID
あたりだ...続きを読む

Aベストアンサー

こんにちは。

>コメント頂いた箇所を下記の通り処理を変更しましたが現象はほぼ変わりませんでした。

#1で私の書いた、IsObjectは一般論ですが、個別の問題になるとかなり話は込み入ってしまうから、やめておいたことですが、なんといっても、VBSで、どのように開発しているかは分かりませんが、そのオブジェクトのプロパティとか、確認をして開発したのでしょうか。

>Set upw =objIE.Document.getElementsByName("password")
の時点で、upw を確認できない状態ですと、
upw(0) という「添字(index)」があるかどうかさえ確認できませんよね。
その辺りはどうなんでしょうか?それで、Length プロパティを調べるように書いたわけです。

ふつう、例えば、ここの「教えて!goo」なんかでも、IDとパスワードは、きちんと、[ID(uname, pass)]を持っています。そしてIDには、添字は存在しません。

VBAがあれば、VBEditorのローカルウィンドウで、そのプロパティを確認していただくしかないと思います。もしかしたら、最初からとれていないのかもしれません。

こんにちは。

>コメント頂いた箇所を下記の通り処理を変更しましたが現象はほぼ変わりませんでした。

#1で私の書いた、IsObjectは一般論ですが、個別の問題になるとかなり話は込み入ってしまうから、やめておいたことですが、なんといっても、VBSで、どのように開発しているかは分かりませんが、そのオブジェクトのプロパティとか、確認をして開発したのでしょうか。

>Set upw =objIE.Document.getElementsByName("password")
の時点で、upw を確認できない状態ですと、
upw(0) という「添字(index)」があるか...続きを読む

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

Qバッチファイルでエクセルのマクロを動かしたい

最近になってバッチファイルを知りました。バッチファイルを使ってエクセルファイルの中に書かれたマクロを動かしたいと思っています。
過去ログの検索をし、マクロが書かれたエクセルを起動させるところまではわかりました。
しかしその先がわかりません。わからない内容は次の二つです。
1)エクセル起動時マクロを有効にするかどうか聞いてきます。自動的に有効で起動させるにはどうしたらいいでしょうか。
2)Macro1という名前のものが001.xlsの中に既に作ってあったとして、これを作動させるにはどのようにしたらいいのでしょうか。
環境はwin xp sp2 office2000です。
過去ログを参考にし、下記記述で001.xlsを開くところまではわかりました。この後をどうすればいいか、よろしくお教えください。
"C:\Program Files\Microsoft Office\Office\excel.exe" "c:\My Documents\001.xls"

Aベストアンサー

こんにちは。

Perl 自体は、また別というか、Wscript.Run で呼び出してもよいと思いますが、
WScript でも、Perl の複雑な処理にはかないませんが、正規表現も持っていますから、多少は似たようなマネが出来ます。

バッチプログラムと違うのは、まず、フォルダを探すことが可能だということと、フォルダを選択する、ダイアログが使えるということです。

個別のファイルのファイルの移動なら、

Const myPATH ="C:\My Documents\

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile =objFS.GetFile(myPATH & "Test.txt")
objFile.Move "C:\"

個別のファイルのファイルの削除なら、

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile =objFS.GetFile(myPATH & "Test.txt")
objFile.Delete

----------------------------------------------
ワイルドカードも使うようでしたら、
Const myPATH ="C:\My Documents\


Set objFS = CreateObject("Scripting.FileSystemObject")
objFS.MoveFile myPATH &"*.txt", "C:\"

ですし、ファイルの削除なら、

Set objFS = CreateObject("Scripting.FileSystemObject")
objFS.DeleteFile myPATH &"*.txt"

ということになります。

---------------------------------------------
なお、余談ですがVBAの技術は、今はもう停滞したままですが、総じて、テキスト・スクリプト側は、日進月歩、Win XP になってからは、1年ごとに、まるで違う技術が導入されているのです。歯が立たないかもしれませんが、どんな風になっているかは、知っておいたほうがよいかもしれません。昔は、コンパイラーを使った、実行ファイルしたが、今は、テキスト・スクリプトで、ツールを出しています。それは、Office 2007 も同じですね。そして、今は、スクリプトで、.Net FrameWork まで使ってしまおうというのだから、時代は変わっているのです。(知っている人には、間が抜けた発言ですが。)

参考サイト:
ヘイ! スクリプティング ガイ
http://www.microsoft.com/japan/technet/scriptcenter/learnit.mspx

こんにちは。

Perl 自体は、また別というか、Wscript.Run で呼び出してもよいと思いますが、
WScript でも、Perl の複雑な処理にはかないませんが、正規表現も持っていますから、多少は似たようなマネが出来ます。

バッチプログラムと違うのは、まず、フォルダを探すことが可能だということと、フォルダを選択する、ダイアログが使えるということです。

個別のファイルのファイルの移動なら、

Const myPATH ="C:\My Documents\

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objF...続きを読む

QChr(13)とChr(10)の違いは?

myStr = Replace(myStr, Chr(13), "")

myStr = Replace(myStr, Chr(10), "")

で、改行を置換しているのですが、どちらかでも改行できる時や
どちらかじゃないと改行できない時があります。

そもそもChr(13)とChr(10)の違いはなんでしょう?
どちらも改行ですよね?
何が違うのでしょう?

Aベストアンサー

こんにちは。お邪魔します。

Chr(10) ・・・ ラインフィード ・・・ 略して、Lf

Chr(13) ・・・ キャリッジリターン ・・・ 略して、Cr

改行文字に何を使うのかはアプリケーションが規定するものです。

Win・Office環境では
上のふたつを組合わせた改行[CrLf]を使うことが多いと思います。
次に[Lf]、そして、[Cr]

なので、ソースによっては
  myStr = Replace(myStr, vbCrLf, "")
と、一発で置換できるケースも少なくないです。
■ソースごとに改行文字を確認しておくことから始めた方が有利になります。■

ひとまず、VBAでの改行の扱いに慣れるには
■VBAで用意された文字列定数について知っておいた方がよいと思います。■
 VBE(Visual Basicの編集画面)が開いている状態で、
 F2 キー → オブジェクトブラウザー起動
 検索小窓に、vbCrLf、とタイプして、検索ボタン
 VBA.Constantsクラスのメンバーが表示され
 その中にすべての改行文字(文字列定数)が含まれています。
 そのまま、F1 キーでヘルプを表示します。
詳しい説明はヘルプを読む方がいいでしょう。

実践的な話として、
Chr(10)やChr(13)は関数の戻り値です。
対して、
vbLfやvbCr(またはvbCrLf)は定数です。
定数で済ませられるなら、定数の方が何かと有利です。
定数の名前は略号ですから、実態をイメージし易くなっています。
定数の扱いに慣れることをお奨めします。
例)
  myStr = Replace(myStr, vbLf, "")
  myStr = Replace(myStr, vbCr, "")
  myStr = Replace(myStr, vbCrLf, "")

もしも文字列定数を先に覚えていたなら、疑問にもならなかったのかも知れませんね。
私の場合は、改行の何たるかを覚える前に文字列定数覚えていて、困ることありませんでしたから。

以上、ご参考まで。

こんにちは。お邪魔します。

Chr(10) ・・・ ラインフィード ・・・ 略して、Lf

Chr(13) ・・・ キャリッジリターン ・・・ 略して、Cr

改行文字に何を使うのかはアプリケーションが規定するものです。

Win・Office環境では
上のふたつを組合わせた改行[CrLf]を使うことが多いと思います。
次に[Lf]、そして、[Cr]

なので、ソースによっては
  myStr = Replace(myStr, vbCrLf, "")
と、一発で置換できるケースも少なくないです。
■ソースごとに改行文字を確認しておくことから始めた方が有利...続きを読む

QDOSコマンドラインからxmlファイル整形したい

こんにちは。

Windows のコマンドライン(正確にはバッチファイルで)、指定した xml ファイルを整形する方法を探しています。

整形方法は適当でよいですし、検証機能はなくても構いません(あっても別にいいです)。
現状、XMLがまったくの改行なしでベタ打ちされているので、多少は整形しないと、というレベルです。後々のファイル処理がややこしくならないように。

簡単に準備できるもの、コマンドもシンプルで、オプションなども複雑でないものがいいのですが、なにかいいプログラムなどご存じでしたら教えてください。XMLファイルは最大で10MBくらいあるかもしれません。

Aベストアンサー

定番ですが HTML Tidy とか。名前は HTML だけど XML にも対応してます。

実行してみましょう。これが元のファイルの sample.xml。改行無し。

 <?xml version="1.0" encoding="utf-8" ?><friends><person><name>松田松男</name><nickname>まっちゃん</nickname><tel>0123-45-6789</tel></person><person><name>高野高雄</name><nickname>タカさん</nickname><tel>9876-54-3210</tel></person></friends>

tidy で整形するとこんな感じ。

 $ tidy -utf8 -xml -i -q sample.xml
 <?xml version="1.0" encoding="utf-8"?>
 <friends>
 <person>
 <name>松田松男</name>
 <nickname>まっちゃん</nickname>
 <tel>0123-45-6789</tel>
 </person>
 <person>
 <name>高野高雄</name>
 <nickname>タカさん</nickname>
 <tel>9876-54-3210</tel>
 </person>
 </friends>

これは Linux で実行したけど、Windows 版もあります。

説明は次のページがわかりやすいかな。

http://d.hatena.ne.jp/takuya_1st/20110830/1314704820

下のページが本家。

http://tidy.sourceforge.net/

定番ですが HTML Tidy とか。名前は HTML だけど XML にも対応してます。

実行してみましょう。これが元のファイルの sample.xml。改行無し。

 <?xml version="1.0" encoding="utf-8" ?><friends><person><name>松田松男</name><nickname>まっちゃん</nickname><tel>0123-45-6789</tel></person><person><name>高野高雄</name><nickname>タカさん</nickname><tel>9876-54-3210</tel></person></friends>

tidy で整形するとこんな感じ。

 $ tidy -utf8 -xml -i -q sample.xml
 <?xml version="1.0" encoding...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報