VBScript で XML

はてな」からダウンロードした XML を読んで、HTML に保存する

↓ こんな XML ファイルを読む

<?xml version="1.0" encoding="UTF-8"?>
<diary>

<day date="2005-10-02" title="Delphi Personal で データベース">
<body>
*p1*[Delphi][ADO][COM] Delphi Personal で ADO
**データベースを作成する
&lt;PRE&gt;
&lt;SPAN CLASS=&quot;KEY&quot;&gt;procedure&lt;/SPAN&gt; TForm1.Button5Click&amp;#x28;Sender: TObject&amp;#x29;;
&lt;SPAN CLASS=&quot;KEY&quot;&gt;var&lt;/SPAN&gt;
    cat: &lt;SPAN CLASS=&quot;KEY&quot;&gt;Variant&lt;/SPAN&gt;;&lt;SPAN CLASS=&quot;COM&quot;&gt;//Catalog&lt;/SPAN&gt;
&lt;SPAN CLASS=&quot;KEY&quot;&gt;begin&lt;/SPAN&gt;
    cat := CreateOleObject&amp;#x28;'ADOX.Catalog'&amp;#x29;;

    &lt;SPAN CLASS=&quot;COM&quot;&gt;//Edit3 に mdbファイル名を入力&lt;/SPAN&gt;
    cat.Create&amp;#x28;'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Edit3.Text + ';'&amp;#x29;;

    &lt;SPAN CLASS=&quot;COM&quot;&gt;// Access97   OLEDB.3.51&lt;/SPAN&gt;
    &lt;SPAN CLASS=&quot;COM&quot;&gt;// Access2000 OLEDB.4.0&lt;/SPAN&gt;
&lt;SPAN CLASS=&quot;KEY&quot;&gt;end&lt;/SPAN&gt;;
&lt;/PRE&gt;
</body>
</day>

<day date="2005-02-02" title="C++Builder Personal で データベース">
<body>
*p1*[C++Builder][ADO][COM] C++Builder Personal で ADO
**データベースを作成する
&lt;PRE&gt;
&lt;SPAN CLASS=&quot;KEY&quot;&gt;void&lt;/SPAN&gt; &lt;SPAN CLASS=&quot;KEY&quot;&gt;__fastcall&lt;/SPAN&gt; TForm1::Button5Click&amp;#x28;TObject *Sender&amp;#x29;
{
    &lt;SPAN CLASS=&quot;KEY&quot;&gt;Variant&lt;/SPAN&gt; cat = Variant::CreateObject&amp;#x28;&quot;ADOX.Catalog&quot;&amp;#x29;;

    &lt;SPAN CLASS=&quot;COM&quot;&gt;//Edit3 に mdbファイル名を入力&lt;/SPAN&gt;
    cat.Exec&amp;#x28;Function&amp;#x28;&quot;Create&quot;&amp;#x29;&amp;#x3C;&amp;#x3C;&quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot; + Edit3-&amp;#x3E;Text + &quot;;&quot;&amp;#x29;;

    &lt;SPAN CLASS=&quot;COM&quot;&gt;// Access97   OLEDB.3.51&lt;/SPAN&gt;
    &lt;SPAN CLASS=&quot;COM&quot;&gt;// Access2000 OLEDB.4.0&lt;/SPAN&gt;
}
&lt;/PRE&gt;
</body>
</day>
</diary>

lesson004.vbs

Dim dom
Set dom = CreateObject("Microsoft.XMLDOM")
dom.Load(WScript.Arguments(0))

Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")

Dim sDate:  sDate  = ""
Dim sTitle: sTitle = ""

getXml dom.DocumentElement

Set fs  = Nothing
Set dom = Nothing


Sub getXml(node)
    If  node.nodeValue <> "" Then
        putHtml node.parentNode.nodeName, node.nodeValue
    End If

    If Not (node.Attributes Is Nothing) Then
        For Each attr In node.Attributes
            putHtml attr.nodeName, attr.nodeValue
        Next
    End If

    If node.hasChildNodes Then
        For Each child In node.childNodes
            getXml child
        Next
    End If
End Sub

Private Sub putHtml(nodeName, nodeValue)
    Select Case nodeName
        Case "date"
            sDate = nodeValue

        Case "title"
            sTitle = nodeValue

        Case "body"
            Dim tsHtml
            Set tsHtml = fs.OpenTextFile(WScript.Arguments(1) & "\" & sDate & ".html", 2, True)

            tsHtml.WriteLine "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"">"
            tsHtml.WriteLine "<html>"
            tsHtml.WriteLine "<head>"
            tsHtml.WriteLine "    <title>" & sTitle & "</title>"
            tsHtml.WriteLine "</head>"
            tsHtml.WriteLine "<body>"

            tsHtml.WriteLine nodeValue

            tsHtml.WriteLine "</body>"
            tsHtml.WriteLine "</html>"

            tsHtml.Close
            Set tsHtml = Nothing
    End Select
End Sub

実行形式


C:\>cscript c:\study\vbscript\chapter005\lesson004.vbs c:\study\vbscript\chapter
005\hatena.xml c:\study\vbscript\chapter005\html //nologo

2005-02-02.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>C++Builder Personal で データベース</title>
</head>
<body>

*p1*[C++Builder][ADO][COM] C++Builder Personal で ADO
**データベースを作成する
<PRE>
<SPAN CLASS="KEY">void</SPAN> <SPAN CLASS="KEY">__fastcall</SPAN> TForm1::Button5Click&#x28;TObject *Sender&#x29;
{
    <SPAN CLASS="KEY">Variant</SPAN> cat = Variant::CreateObject&#x28;"ADOX.Catalog"&#x29;;

    <SPAN CLASS="COM">//Edit3 に mdbファイル名を入力</SPAN>
    cat.Exec&#x28;Function&#x28;"Create"&#x29;&#x3C;&#x3C;"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Edit3-&#x3E;Text + ";"&#x29;;

    <SPAN CLASS="COM">// Access97   OLEDB.3.51</SPAN>
    <SPAN CLASS="COM">// Access2000 OLEDB.4.0</SPAN>
}
</PRE>

</body>
</html>

2005-10-02.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Delphi Personal で データベース</title>
</head>
<body>

*p1*[Delphi][ADO][COM] Delphi Personal で ADO
**データベースを作成する
<PRE>
<SPAN CLASS="KEY">procedure</SPAN> TForm1.Button5Click&#x28;Sender: TObject&#x29;;
<SPAN CLASS="KEY">var</SPAN>
    cat: <SPAN CLASS="KEY">Variant</SPAN>;<SPAN CLASS="COM">//Catalog</SPAN>
<SPAN CLASS="KEY">begin</SPAN>
    cat := CreateOleObject&#x28;'ADOX.Catalog'&#x29;;

    <SPAN CLASS="COM">//Edit3 に mdbファイル名を入力</SPAN>
    cat.Create&#x28;'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Edit3.Text + ';'&#x29;;

    <SPAN CLASS="COM">// Access97   OLEDB.3.51</SPAN>
    <SPAN CLASS="COM">// Access2000 OLEDB.4.0</SPAN>
<SPAN CLASS="KEY">end</SPAN>;
</PRE>

</body>
</html>