(for Internet Explorer)
関連
<?xml version="1.0" encoding="UTF-8"?><MultiText><Text id="1"><![CDATA[
abc  def 
]]></Text><Text id="second"><![CDATA[
------------------------------------------------------------
abc
  def
------------------------------------------------------------
]]></Text></MultiText>
abc  def 
abc
  def
ファイルのパス(アドレス)に "Sample.xml#1" を指定すると、下記の文字列が取得できます。
最後に改行が入りますが、アプリケーションによっては最後の改行を1つ削除します。
Sample.xml
ファイルのパス(アドレス)に "Sample.xml#second" を指定すると、下記の文字列が取得できます。
最後に改行が入りますが、アプリケーションによっては最後の改行を1つ削除します。
タグ名は、上記と異なるタグ名でも構いませんが、id 属性は必須です。
encoding 属性の設定値は、ファイルの文字コードの設定に合わせてください。
例: UTF-8、UTF-16、Shift_JIS など
複数のテキスト・ファイルを1つにまとめた XML ファイル。
先頭文字 (<![CDATA[ の直後) が改行文字の時は、その改行文字は取得されません。
改行文字から始めるときは、2つの改行文字をファイルに記述してください。
最初の行や最後の行が ---- のように - が4つ以上あるだけの行のときは、その行は取得され
ません。 コメントとして無視されます。 ---- から始まるテキストは、2行目から記述してください。
ファイルに同じ id 属性が存在すると、上の方にある部分のみ有効になります。
ファイルのパス(アドレス)に "Sample.xml" を指定すると、ファイルの全体の内容が取得できます。
→ MultiTextXML_Class (clib)
ファイルの内容を内部でキャッシュします。
参考
→ XML
----
マルチ パート テキストXML の id 属性を、グループ名+メンバー名として階層化して、すべての
グループに関してループするコードは、以下のようになります。 なお、a_tail には、代表とする
メンバー名を設定してください。
    Set test_data = new MultiTextXML_Class

    '// Set "test_symbols"
    a_tail = "_TestText"
    Set test_symbols = new ArrayClass
    Set root = LoadXML( test_path, Empty )
    For Each elem  In root.selectNodes( "./Text" )
        id = elem.getAttribute( "id" )
        If Right( id, Len( a_tail ) ) = a_tail Then
            test_symbols.Add  Left( id, Len( id ) - Len( a_tail ) )
        End If
    Next

    '// ...
    For Each  test_symbol  In  test_symbols.Items
        text = test_data.GetText( test_path +"#"+ test_symbol +"_TestText" )
        ans  = test_data.GetText( test_path +"#"+ test_symbol +"_Answer" )
    Next
を内部で呼び出しており、id 属性と供に cut_indent 属性が
あれば、indent 属性や改行コードも指定することができます。
LF\n
CR+LF
→ T_XML.vbs
→ vbslib.vbs
Set files = new MultiTextXML_Class
text = files.GetText( "Files\T_MultiTextXML_1.xml#1" )
Function  MultiTextXML_Class::GetText( URL as string ) as string
【引数】
URL
ファイルパス +"#"+ ID属性の値、または、ファイルパス
テキスト・ブロックの内容
返り値
テスト
サンプル
ソース
ファイルを、リードします。
T_MultiTextXML
Function  MultiTextXML_Class::IsExist( URL as string ) as boolean
ファイルに、指定の id があるかどうかを返します。
返り値
指定の id があるかどうか
ファイルパス +"#"+ ID属性の値、または、ファイルパス
URL
【引数】
→ T_XML.vbs
→ vbslib.vbs
テスト
ソース
Set files = new MultiTextXML_Class
If files.IsExist( "Files\T_MultiTextXML_1.xml#1" ) Then ...
サンプル
T_MultiTextXML_IsExist
Function  GetXPath( DOMObject as IXMLDOMElement, ShowAttrs as string ) as string
指定した XML の DOM オブジェクトがある場所を表す XPath を返します。
【引数】
DOMObject
IXMLDOMElement または IXMLDOMAttribute
Empty、または、XPath に含める XML 属性名、またはその配列
ShowAttrs
(src)
DOMObject 引数が IXMLDOMElement クラスのときは、ルート XML 要素からのパスは含まれます。
DOMObject 引数が IXMLDOMAttribute クラスのときは、ルート XML 要素からのパスは含まれません。
その理由は、標準の DOM の仕様書では、IXMLDOMAttribute クラスから、所属する XML 要素が
取得できないからです。
サンプル
  Dim  node
  Dim  root : Set root = LoadXML( "sample.xml", Empty ) ' as IXMLDOMElement

  '// GetXPath( root, Empty ) = "/Root"

  node = root.selectNodes( "/Root/Test1" )
  '// GetXPath( node(0), Empty ) = "/Root/Test1"

  node = root.selectNodes( "/Root/Test2/@id" )
  '// GetXPath( node(0), Empty ) = "@id"

  node = root.selectNodes( "/Root/Test2[@id='1']/Sub" )
  '// GetXPath( node(0), Array("id","attr") ) = _
  '//     "/Root/Test2[@id='1' and @attr='a']/Sub"
テスト
→ T_XML.vbs # [T_XPath]
XPath
返り値
参考
→ XPath
ShowAttrs 引数に指定した、返り値に含める XML 属性は、XPath に含まれるすべて XML 要素、
つまり、親ノードの XML 要素に対しても、XML 属性を含めます。
Function  GetXmlAttribute( BaseXmlElement, XPathForXmlElement, AttrName )
XML 属性の値を返します。
【引数】
BaseXmlElement
XPathForXmlElement
XPathForXmlElement の基準となる XML要素(タグ)
属性を変更する XML 要素(タグ) への XPath または Empty
返り値
XML 属性の値、文字列型のみ、Empty=属性なし
XML 属性の名前
AttrName
(src)
サンプル:
参考
  Dim  root : Set root = LoadXML( "in.xml", Empty ) ' as IXMLDOMElement
  value = GetXmlAttribute( root, "./Tag1", "attr1" )
attr1
Tag1
GetXmlAttribute
テスト
→ T_XML.vbs # [T_GetXmlAttribute]
→ getAttribute (IXMLDOMElement)
廃止されました。
XPath に指定したタグ(XML要素)が存在しないときは、作成します。 このとき、自動的に改行文字と
タブ文字が入ります。 ただし、ルートのXMLタグに
Function  XmlWrite( BaseXmlElement as IXMLDOMElement, XPath as string, Value as string ) as boolean
XML のタグの間のテキスト、または XML の属性の値を変更します。
【引数】
BaseXmlElement
XPath
XPath の基準となる XML要素(タグ)
タグの間のテキスト、または XML の属性の位置を表す XPath
返り値
変化があったかどうか
(src)
変更後のテキストまたは XML 属性の値、""=値なし、Empty=削除する
Value
タグの間のテキストは、厳密には XPath = "/Root/Elem/text()" ですが、XPath = "/Root/Elem" を指定
してください。
サンプル
→ setAttribute (IXMLDOMElement)
参考
    Dim  b, is_change, root
    Set root = LoadXML( "in.xml", Empty ) '// as IXMLDOMElement
    b= XmlWrite( root, "./Tag1/@attr1", 123 )
    is_change = is_change or b
    If is_change Then  root.ownerDocument.save  "out.xml"
123
Tag1/@attr1
XmlWrite
テスト
→ T_XML.vbs # T_XmlWrite
関連
xml:space="preserve"
があるとき、かつ、タグの開始から
XPath = "/Root/Elem" (XML要素へのパス)のとき、Value = "" なら、<Elem/> となります。
XPath = "/Root/Elem" (XML要素へのパス)のとき、Value = Empty なら、<Elem/> を削除します。
XPath = "/Root/Elem/@attr" (XML属性へのパス)のとき、Value = "" なら、<Elem attr=""/> となります。
XPath = "/Root/Elem/@attr" (XML属性へのパス)のとき、Value = Empty なら、<Elem/> となります。
終了までが1行の中にある部分の中に、新規タグを作成するときは、改行文字もタブ文字も入りません。
(src)
Sub  XmlWriteEncoding( RootXmlElement as IXMLDOMElement, CharSet as string )
XML ファイルの文字コードを指定します。
【引数】
BaseXmlElement
CharSet
ルートの XML要素(タグ)
文字コード
テスト
→ T_XML.vbs # T_XmlWrite
Sub  XmlInsertAfter( in_out_ReferenceNode as IXMLDOMElement, in_NewNode as IXMLDOMElement )
兄弟関係の次になるように、XML 要素を追加します。
【引数】
in_out_ReferenceNode
in_NewNode
XPath の基準となる XML要素(タグ)
タグの間のテキスト、または XML の属性の位置を表す XPath
返り値
テキストまたは XML 属性の値。文字列型
ソース
→ vbslib.vbs
関連
→ insertBefore (IXMLDOMElement)
Function  XmlAttr( s as string ) as string
" " で囲む XML の属性値に(
サンプル:
s = XmlAttr( "<""'" )
s は、"&lt;&quot;'" になります
(src)
関連
→ T_XML.vbs # [T_XmlText]
テスト
→ StrT_changeToXmlAttr (clib)
に)変換します。
実体参照
' ' で囲むとき
→ XPath のエスケープ文字、バックスラッシュ \
(src)
s は、"&lt;""&apos;" になります
s = XmlAttrA( "<""'" )
サンプル:
' ' で囲む XML の属性値に(実体参照に)変換します。
Function  XmlAttrA( s as string ) as string
Function  XmlText( s as string ) as string
XML のテキスト(タグの外)に(
Assert  XmlText( "<""" ) = "&lt;"""
関連
→ T_XML.vbs
テスト
サンプル
に)変換します。
実体参照
T_XmlText
→ vbslib.vbs
ソース
Sub  XmlSort( BaseXmlElement as IXMLDOMElement, XPath as string,
    CompareFunc as function,  CompareFuncParam as variant )
XML のタグを並べ替えします。
【引数】
BaseXmlElement
XPath
XPath の基準となる XML要素(タグ)
並べ替えするタグの位置を表す XPath
CompareFunc
テスト
ソース
→ vbslib.vbs
CompareFunc の第3引数
CompareFuncParam
→ T_XML.vbs
T_XmlSort
Sub  Main()
    Set root = LoadXML( "Sample.xml", Empty )
    XmlSort  root, "T", GetRef( "SampleCompare" ), Empty
End Sub

Function  SampleCompare( in_LeftTag, in_RightTag, in_Parameter )
    left_text  = in_LeftTag.selectSingleNode(  "./EN/text()" ).nodeValue
    right_text = in_RightTag.selectSingleNode( "./EN/text()" ).nodeValue
    SampleCompare = StrComp( left_text, right_text, 1 )
End Function
サンプル
<?xml version="1.0" encoding="UTF-16"?>
<Translate>
<T><JP>日本語</JP><EN>2.Japanese</EN></T>
<T><JP>英語</JP><EN>3.English</EN></T>
<T><JP>仏語</JP><EN>1.French</EN></T>
</Translate>
<?xml version="1.0" encoding="UTF-16"?>
<Translate>
<T><JP>仏語</JP><EN>1.French</EN></T>
<T><JP>日本語</JP><EN>2.Japanese</EN></T>
<T><JP>英語</JP><EN>3.English</EN></T>
</Translate>
T タグをソートする。 ソートキーは、T/EN。
Function  ObjToXML( TagName as string, Objs as object or array, Opt as variant ) as string
オブジェクトの基本的なデータを XML 文字列に変換します。
  s = ObjToXML( Empty, obj, Empty )
サンプル:
【引数】
TagName
ルート・タグ名、Empty にすると、ルートタグを追加しません。
返り値
Objs
XML データの内容にするオブジェクト、またはその配列
Opt
Empty を指定してください
XML 文字列
関連
オブジェクトのクラス名と、Name プロパティ、DefinePath プロパティから XML データを作成します。
他のプロパティも含んだ XML データは、xml プロパティを作成してください。
(src)
→ SetDefinePath
Function  ChangeToXml( XML as string or object ) as IXMLDOMElement
XML 文字列などを、XML 要素オブジェクトに変換します。
IXMLDOMElement
参考
(src)
・XML が記述された文字列
などで取得した
IXMLDOMElement
引数に指定できるものは、次のものがあります。
・ParentProcess や ChildProcess
XML ファイルをロードする
Function  SetXmlAttribute( BaseXmlElement as IXMLDOMElement, XPathForXmlElement as string,
                           AttrName as string, AttrValue as string ) as boolean
XML 属性の値を変更します。
【引数】
BaseXmlElement
XPathForXmlElement
XPathForXmlElement の基準となる XML要素(タグ)
属性を変更する XML 要素(タグ) への XPath または Empty
返り値
変更後の XML 属性の値、""=値なし、Empty=属性を削除する
AttrValue
変化があったかどうか
(src)
サンプル:
→ setAttribute (IXMLDOMElement)
参考
  Dim  b, is_change
  Dim  root : Set root = LoadXML( "in.xml", Empty ) '// as IXMLDOMElement
  b= SetXmlAttribute( root, "./Tag1", "attr1", "1234" )
  is_change = is_change or b
  If is_change Then  root.ownerDocument.save  "out.xml"
1234
attr1
Tag1
SetXmlAttribute
テスト
→ T_XML.vbs # T_SetXmlAttribute
XML 属性の名前
AttrName
XPathForXmlElement に該当する XML 要素が複数あったときは、すべての XML 要素の属性を変更
します。
XPathForXmlElement に該当する XML 要素が無かったときは、XML 要素を追加します。
廃止されました。
Sub  UpdateLineAttributeInXML( in_Path as string, in_AttributeName as string )
XML ファイルの中の行番号を値に持つ XML属性の値を、実際の行番号に合わせます。
【引数】
in_Path
内容を置き換える XML ファイルのパス
UpdateLineAttributeInXML  "Sample.xml", "@line_num"
サンプル
→ T_XML.vbs
テスト
→ vbslib.vbs
ソース
内部で XML の構文解析は行いません。 単純に置き換えているだけです。
Sample.xml ファイルを処理する前:
スクリプト:
<Tag line_num="">
     <Tag2
         line_num="999">
line_num="999"
</Tag>
Sample.xml ファイルを処理した後:
<Tag line_num="1">
     <Tag2
         line_num="3">
line_num="4"
</Tag>
"@"+ XML属性の名前
in_AttributeName
T_UpdateLineAttributeInXML
キーワード:
関連
XML の Variable タグ
XML ファイルを整形します
関連
バイナリ ファイル
レジストリ ファイル
文字列 TextStream
メイク ファイル
指定した VBScript ファイルの中の関数を呼び出し、終了するまで待ちます。
クラス定義や関数定義が入った VBSファイルをインクルードします。
指定したシンボルの関数が定義されているかどうかを返します。
現在のプロセスのまま
コマンドライン・オプションが指定されているかどうかを返します。
環境変数を展開します
指定したコマンドラインを新プロセスで実行します。 終了を待ちません。
指定したコマンドラインを新プロセスで実行します。 終了を待ちます。
指定した時間だけ待ちます。
指定したファイルが作られるまで待ちます。
新プロセス
待ち
関連
管理者権限を持った新プロセスで実行します。 終了を待ちます。
コマンドラインの引数を返します。 (改良版)
他にもあります。左のツリーから選択してください。
Sub  start( cmdline as string )
指定したコマンドラインを新プロセスで実行します。 終了を待ちません。
cmdline 引数に環境変数を含めることができます。 (%var% 形式)
start """%ProgramFiles%\Movie Maker\moviemk.exe"""
サンプル:
(src)
cmdline 引数にフォルダやデータファイルのパスを指定すると、そのフォルダや
ファイルをダブルクリックしたときと同じように開きます。
コマンドラインでは、パスをダブルクォーテーションで囲むこと
ファイルが見つからないと、E_WIN32_FILE_NOT_FOUND エラーになります
関連
Dim  cmd
cmd = Setting_getEditorCmdLine( 1 )
cmd = Replace( cmd, "%1", "C:\file.txt" )
start  cmd
サンプル:
CPU がマルチコアであれば、複数のプロセスによる並列処理になり高速になります。
→ T_Start_Manually.vbs # [T_StartErr]
テスト
  start  "cmd.exe /C cscript //nologo sample.vbs | "+ g_vbslib_ver_folder +_
    "safetee\safetee.exe -o Sample_out.txt & exit"
safetee
cmd.exe /C を経由して実行してください。 > でリダイレクトすると内容が表示されない
ので、パイプを経由して safetee(または tee)を実行してください。 また、パイプを
使う場合、実行後にウィンドウが残らないように、exit してください。
cmdline 引数に、\?InCurrentProcessFunc\(関数名) を指定すると、指定した関数を
呼び出します。 呼び出した関数から返ると、start 関数から戻ります。
キーワード:
start の後にすぐに終了すると、開けないことがあります。
で、すぐに終了しないようにしてください。
ホームページを開く
start  "http://www.example.com/"
start  """C:\Program Files\Internet Explorer\iexplore.exe"" "+ a_URL
start するプロセスにパラメーターを渡す
Function  RunProg( cmdline as string, stdout_stderr_redirect as string ) as integer
指定したコマンドラインを新プロセスで実行します。 終了を待ちます。
【引数】
cmdline
stdout_stderr_redirect
コマンドライン(実行ファイルパス+パラメータ)
出力先のファイルパス(下記)
返り値
エラーレベル(main 関数の返り値)
Empty や "" のときは、標準出力へ出力し、ファイルに保存しません。
"nul" のときは、標準出力へ出力せず、出力内容を破棄します。
stdout_stderr_redirect 引数
コマンド・プロンプトで使えるコマンドを実行するときは、次のようにしてください。
RunProg "cmd /c (dir > files.txt)", ""
RunProg "cmd /c (cd sub & dir > ..\files.txt)", ""
複数のコマンドを実行するときは、& をつけてください。
(src)
プロセスが終了するまで、関数内部で待ちます。
VBScript を実行するときは、cscript を経由してください。
vbslib の input などを使っているときは、/GUI_input:1 または /set_input を指定してください。
RunProg "cscript //nologo  sample.vbs  /GUI_input:1", ""
新プロセスのカレントフォルダは、RunProg を呼び出す直前のカレントフォルダーになります。
コマンドプロンプトから標準入力するプログラムは、停止してしまいます。
対策
RunProg "batch1.bat", ""
→ T_Call\TryExec.vbs
実証コード
RunProg "batch1.bat /close", ""
閉じないバッチファイルは、閉じるようにする
参考
Dim  g_ChildHead as string
新プロセスが標準出力へ出力する内容を表示するときに、行頭に追加する文字列。
デフォルトは、何も追加しません。
グローバル変数です。
VBScript をデバッガに接続するときは、下記のように //x を付けてください。
RunProg "cscript //x sample.vbs", ""
関連
→ RunProg (clib)
テスト
→ T_DebugVBS_Manual.vbs
関連
複数のコマンドをバッチファイルのように記述するときは
RunProg したプロセスAが、子プロセスBを生成したとき、プロセスAが終了しても、プロセスB
が終了していなければ、RunProg から戻りません。
start  "cmd.exe /C ""batch1.bat"""
を指定したときは、RunProg 自体の echo 出力は
しなくなりますが、RunProg から実行するプログラムは、echo 出力されます。
を使っても出力しなくなりますが、ファイルに保存できます。
一般的なシェルと異なり、リダイレクトしても標準出力へも出力されます。
cmdline 引数に指定した実行ファイルやスクリプトファイルがあるフォルダーではありません。
→ T_RunProg.vbs
補足
入力が要求されていないのに止まるとき
新しいウィンドウが開き、標準入力ができます
ダブル クォーテーションを指定するときは、\' を指定してください。
RunProg "cscript  sample.vbs  \'/Option\'", ""
sample.vbs に、名前なし引数(オプション以外)である、/Option という文字列が
渡ります。
出力内容をテストするときは、
SysWOW64\cscript.exe から cscript (cscript のフォルダー指定なし)を RunProg したときは、
SysWOW64\cscript.exe が起動します。
から cscript を起動したときは、system32\cscript.exe (64bit版) が起動します。