[Sitecore][Page Editor]XHTMLの検証エラー

最近Sharepointのインポートをばっかりやっていました。インポートしたコンテントがXHTML検証エラーがばっかりだったので、この古い問題に書いてみたいと思いました。

最初にこのXHTML検証エラーをみたのはがサイトコアバージョン5でした。

20140729_01

20140729_02

これはサイトコアのディフォルト設定で有効なXHTMLドキュメントであるかどうかの検証が有効となっています。

20140729_03

20140729_04

そもそも、サイトコアが使用しているXMLスキーマは7.2となっても変わっていません。

20140729_05

 

対策として、お客さんによって、検証を外すのは一番簡単だけど、基本的にお客さんからの要求がない限り、エラーとなるタグをこの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からのインポートなので、エラーとなるタグを順番に追加することにしました。ただ、コンテントはたくさんインポートしているので、下記のコードでエラーが有るアイテムをリストして、そして、順番にエラーが発生するタグを追加した。

20140729_06

<%@ 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);
                    });
                }
            }
        }
    }
}

 

 

Uncategorized