alt 属性を持つすべてのタグに title 属性を 3 ~ 400 個のファイルに追加しようとしています。これらのファイルの 90% は asp ファイルで、残りは aspx/html/++ です。
HTMLAgilityPack でこれを修正し、これを行うために C# で小さなプログラムを作成することにしました。ファイル名を .txt ファイルに書き込み、そのテキスト ファイルを実行して各ファイルをロードするだけです。プログラムは正常に動作しますが、HAP は閉じ括弧を追加し続け、他の特定のタグを変更します。エラーを別のtxtファイルに書き込むだけでいいと思っていましたが、これらの変更のすべてが、エラーメッセージを保持するために設定した文字列に実際に書き込まれているわけではないことに気付きました(変更されたファイルがありますが、エラー ログ ファイルを確認してください。これらの変更に関するメッセージはありません)。
ほとんどの場合、追加されるのは /tr、/td、および /table です。
このプロジェクトはかなり大きく (これらのファイルはプロジェクト全体のほんの一部です)、必要以上の変更を加えたくありません。
まず、私の問題に関するプログラムの部分は次のとおりです。
static void Main(string[] args)
{
string[] files = System.IO.File.ReadAllLines(@"filelist.txt");
string errors = "";
HtmlDocument doc = new HtmlDocument();
bool dirExists;
doc.OptionCheckSyntax = false;
doc.OptionReadEncoding = false;
doc.OptionOutputOriginalCase = true;
doc.OptionWriteEmptyNodes = true;
HtmlNode.ElementsFlags.Remove("option");
foreach (string file in files)
{
doc.Load(file);
if (doc.DocumentNode.SelectNodes("//@alt") != null)
{
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//@alt"))
{
if (!node.GetAttributeValue("title", false))
{
foreach (HtmlAttribute attr in node.Attributes.ToList())
{
if (attr.Name == "alt")
{
node.SetAttributeValue("title", attr.Value);
}
}
}
}
string newfile = file.Replace("C:\\source\\", "C:\\SLtmp\\");
string[] tmp = newfile.Split('\\');
string folder = "";
for (int i = 0; i < tmp.Length - 1; i++)
{
folder += tmp[i] + '\\';
}
dirExists = System.IO.Directory.Exists(folder);
if (!dirExists)
{
System.IO.Directory.CreateDirectory(folder);
}
doc.Save(newfile);
foreach (HtmlParseError error in doc.ParseErrors)
{
errors += newfile + " (" + error.Line + "," + error.LinePosition + "): " + error.Reason + "\n";
}
}
}
System.IO.File.WriteAllText("C:\\tmp\\errors.txt", errors);
}
基本的に、最終的に何が起こるかというと、現在読み取っているファイルで閉じられていないことが検出された多くの終了タグが追加されますが、タグは別のファイルで終了している可能性があります。
そこで私の質問は次のとおりです。HAP に、私が具体的に行った変更のみを行わせ、自動的に行いたいという衝動に駆られた修正を無視することは可能ですか?