IronPython|XHTMLをゴニョゴニョするスクリプト書いてみた。

コード保管庫の更新でいずれこういうのが必要になるんじゃないかと思って書いてみた。sysすらimportしない生粋のIronPython、全部.NETで書いてます。あーIronPython可愛いよIronPython可愛い。

import clr
clr.AddReference("System")
clr.AddReference("System.XML")
from System import *
from System.Console import *
from System.IO import *
from System.Environment import *
from System.Xml import *

def update(file):
	WriteLine(file)
	
	nameSpace = "http://www.w3.org/1999/xhtml"
	xmlDoc = XmlDocument()
	xmlDoc.Load(file)
	xnm = XmlNamespaceManager(xmlDoc.NameTable)
	xnm.AddNamespace("ns", nameSpace)
	for node in xmlDoc.SelectNodes("//ns:html/ns:body/ns:p/ns:code", xnm):
		at = xmlDoc.CreateAttribute("class")
		at.Value = "code"
		node.Attributes.Append(at)
	
	xmlDoc.Save(file)

dir = GetCommandLineArgs()[2]

for file in Directory.GetFiles(dir, "*.html", SearchOption.TopDirectoryOnly):
	if (Int32.TryParse(Path.GetFileNameWithoutExtension(file)) and 
	Path.GetFileNameWithoutExtension(file).Length == 5):
		update(file)

XPATHで要素拾って属性付けるだけのコード。Int32.TryParseがうまく呼べないんだよなぁ。C#のout相当のことをPythonでやる方法がわからない。だから引数省いたら実行出来た。でも、パース出来ない値でもTrue返してるみたいだ。意味が無い。

dir = GetCommandLineArgs()[2]

って行なんだけど、System.Environment.GetCommandLineArgs()が返すのは頭から

0:ipy

1:自身のスクリプトのパス

2:スクリプトに渡した引数

になるみたい。sys.argvと違うから注意。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください