2012-02-27 11 views
3

私は、Html Agility Packを使用して、私の文書の先頭にいくつかのjavascriptを出力しています。しかし、ドキュメントをファイルシステムに保存した後、私はjavascriptソースが変更されたことを認識しました。私はHAPがスクリプトを検証しようとしているので、これが起こると思います。これを防ぐことはできますか?以下に示すように、私は既にさまざまなオプションを設定しようとしました。 scripts.InnerHtml AgilityPackを使用すると、HTMLなどのコンテンツを解析しようとすると:Html Agility Packは私のjavascriptでつまみます

public static void AddScriptNode(this HtmlNode headNode, HtmlDocument htmlDoc, string filePath) 
{ 
    string content = ""; 

    using (StreamReader rdr = File.OpenText(filePath)) 
    { 
     content = rdr.ReadToEnd(); 
    } 
    if(headNode != null) 
    { 
     HtmlNode scripts = htmlDoc.CreateElement("script"); 
     scripts.Attributes.Add("type", "text/javascript"); 
     scripts.InnerHtml = "\n" + content + "\n"; 
     headNode.AppendChild(scripts); 
    } 
} 

答えて

8

私の仮定をscriptタグを追加するための

var htmlDoc = new HtmlDocument(); 
htmlDoc.OptionCheckSyntax = false; 
htmlDoc.OptionAutoCloseOnEnd = false; 
htmlDoc.OptionFixNestedTags = false; 
htmlDoc.LoadHtml(htmlContent); 

HtmlNode headNode = htmlDoc.DocumentNode.SelectSingleNode("//head"); 
headNode.AddScriptNode(htmlDoc, "../../Scripts/jquery-1.7.1.min.js"); 

拡張メソッド:HAPを使用して

私のコード。タグがあると、HTMLノードに変換されます。

これを避けるには、<script>の内容をテキストとして設定する必要があります。残念ながら、HtmlNode.InnerTextプロパティは読み取り専用ですが、これに対する回避策があります。スクリプトの体はコメントノード(<!---->が追加される)として追加されます。ここ

if(headNode != null) 
{ 
    HtmlNode scripts = htmlDoc.CreateElement("script"); 
    scripts.Attributes.Add("type", "text/javascript"); 
    scripts.AppendChild(htmlDoc.CreateComment("\n" + content + "\n")); 
    headNode.AppendChild(scripts); 
} 

:あなたは単なるテキスト(コメントノードはpreferrableになります)あなたの<script>ノードにノードを追加することができます。

+2

他人への注釈:htmlコメントなしでscriptタグを追加したい場合は、以下の 'scripts.AppendChild(htmlDoc.CreateTextNode(content)); – jp36

関連する問題