2012-03-31 17 views

答えて

6

Html Agility Packパーサーはdoctypeをコメントノードとして扱います。単に文書の先頭に希望DOCTYPEと コメントノードを追加するHTML文書にDOCTYPEを追加するために :

HtmlDocument htmlDoc = new HtmlDocument(); 

htmlDoc.Load("withoutdoctype.html"); 

HtmlCommentNode hcn = htmlDoc.CreateComment("<!DOCTYPE html>"); 

HtmlNode htmlNode = htmlDoc.DocumentNode.SelectSingleNode("/html"); 
htmlDoc.DocumentNode.InsertBefore(hcn, htmlNode); 

htmlDoc.Save("withdoctype.html"); 

私のコードは、DOCTYPEの存在をチェックしませんので、注意してください。

8

私が知る限り、AgilityPackにはの直接というdoctypeを設定する方法はありませんが、Hansはこのようにdoctypeをコメントノードとして扱います。新しいものを作成し、そこに希望の値を貼り付けていないのであれば、あなたは、まず既存のDOCTYPEを見つけるために試みることができる:DOCTYPE`は、大文字と小文字のいずれかの組み合わせで記述することができ

var doctype = doc.DocumentNode.SelectSingleNode("/comment()[starts-with(.,'<!DOCTYPE')]"); 
if (doctype == null) 
    doctype = doc.DocumentNode.PrependChild(doc.CreateComment()); 

doctype.InnerHtml = "<!DOCTYPE html>"; 
+0

'ので、おそらく'/(DOCTYPE '、' DOCTYPE ')] '(XPath 2)または' /コメント()[starts-with(translate(。、' doctype '、' DOCTYPE ') 、 '<!DOCTYPE')] '(XPath 1、D、O、Cなどをd、o、cなどに変換する) –

関連する問題