コード保管庫の更新でいずれこういうのが必要になるんじゃないかと思って書いてみた。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と違うから注意。