[Sitecore][Page Editor]XHTMLの検証エラー
最近Sharepointのインポートをばっかりやっていました。インポートしたコンテントがXHTML検証エラーがばっかりだったので、この古い問題に書いてみたいと思いました。
最初にこのXHTML検証エラーをみたのはがサイトコアバージョン5でした。
これはサイトコアのディフォルト設定で有効なXHTMLドキュメントであるかどうかの検証が有効となっています。
そもそも、サイトコアが使用しているXMLスキーマは7.2となっても変わっていません。
対策として、お客さんによって、検証を外すのは一番簡単だけど、基本的にお客さんからの要求がない限り、エラーとなるタグをこのXSDに追加しているのは現状です。
HTML5を主に使用している場合、 html_5.xsdを参照することをすすめます。
http://blogs.msdn.com/b/webdev/archive/2009/11/18/html-5-intellisense-and-validation-schema-for-visual-studio-2008-and-visual-web-developer.aspx
私の場合はSharePointからのインポートなので、エラーとなるタグを順番に追加することにしました。ただ、コンテントはたくさんインポートしているので、下記のコードでエラーが有るアイテムをリストして、そして、順番にエラーが発生するタグを追加した。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GetValidationErrors.aspx.cs" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:Literal runat="server" ID="ltlError" /> </div> </form> </body> </html>
using System; using System.Linq; using System.Web.Caching; using Sitecore.Data; using Sitecore.Data.Items; using Sitecore.Data.Validators; using ValidatorCollection = Sitecore.Data.Validators.ValidatorCollection; namespace local.sandbox.com.Website. { public partial class GetValidationErrors : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { GetValidationError(); } protected void GetValidationError() { Database master = Database.GetDatabase("master"); Item home = master.SelectSingleItem("/sitecore/content/Home/test"); if (home != null) { var items = home.Axes.GetDescendants() .Where(i => i.TemplateID.ToString().Equals("{2BA0A451-9F5E-4CC3-98DB-70FA423F631C}", StringComparison.OrdinalIgnoreCase)); if (items.Any()) { items.ToList().ForEach(i => { string strError = string.Empty; ValidatorCollection validators = ValidatorManager.BuildValidators(ValidatorsMode.Gutter, i); validators.ToList().ForEach(v => { v.Validate(new ValidatorOptions(false)); if (!v.IsValid && !string.IsNullOrEmpty(v.ControlValidationValue)) { strError += string.Format("Field: {2}, Validator: {0}, Type: {1}<br/>", v.Name, v.Result, v.GetFieldDisplayName()); } }); ltlError.Text += string.Format("Error Item:{0}</br>Error:{1}", i.Paths.Path, strError); }); } } } } }