元素名称gcse:searchbox-only不能表示为XML 1.0

时间:2012-10-04 21:52:30

标签: html xml validation w3c-validation

我在w3验证器中收到以下错误,

 Line 62, Column 140: Element name gcse:searchbox-only cannot be represented as XML 1.0.

我正在使用此代码添加的网站内的Google搜索栏

<gcse:searchbox-only></gcse:searchbox-only>

请帮忙避免此错误。感谢

7 个答案:

答案 0 :(得分:19)

我发现这个答案隐藏在谷歌文档中:

https://developers.google.com/custom-search/docs/element#html5

HTML5有效div标签

只要您遵守以下准则,就可以使用HTML5有效的div标签:

  • 必须将class属性设置为gcse-XXX
  • 任何属性都必须以数据为前缀 - 。

例如:

<div class="gcse-searchbox" data-resultsUrl="http://www.example.com" data-newWindow="true" data-queryParameterName="search" >

答案 1 :(得分:8)

您始终可以使用<div class="gcse-search"></div>而不是<gcse:search></gcse:search>,然后错误将远离w3c验证程序。

答案 2 :(得分:4)

Michael [tm] Smith,负责管理W3C HTML验证器的人says here

  

这不是错误,而是一个警告。它的排放是因为   内容以HTML格式提供,而不是XML MIME类型   HTML解析器对命名空间一无所知 - 将它放在XML中   术语,每个元素名称都是本地名称 - 所以在HTML中,   该元素的文字名称是“g:plusone”。而这个名字不可能   用XML表示,因为XML不允许在本地使用冒号   名。所以警告的精神就是说,万一你想要的话   要将此内容作为XML而不是HTML提供,您有一个元素名称   在XML中不允许使用它。

他在讨论元素g:plusone,但这是同一个问题。

但我不同意。冒号在XML 1.0中的元素本地名称中有效。它们只在XML 1.0 + namespaces中被禁止。所以警告信息肯定可以改进。

更新: 我之前提供了一个基于document.write的解决方法,但正如Jan M在评论中指出的那样,IE有自己的想法,关于如何处理标签名称中带冒号的元素,所以它在那里不起作用。相反,我建议按照Jan的回答。

答案 3 :(得分:2)

解决方案非常简单,请勿直接在html页面中使用谷歌搜索标记只需放置一个简单的JavaScript代码,通过 javascript的innerhtml 选项在html中插入谷歌搜索标记

以下是示例:

<div id="gsearch"></div>

<script>
   var gcseDiv = document.getElementById('gsearch');
   gcseDiv.innerHTML = '<gcse:search></gcse:search>'
</script>

在此行之后,您可以编写或粘贴您的Google搜索代码,该代码与以下内容相同

      <script>
      (function() {
                var cx = 'xxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxx';
                var gcse = document.createElement('script');
                gcse.type = 'text/javascript';
                gcse.async = true;
                gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
                    '//www.google.com/cse/cse.js?cx=' + cx;
                var s = document.getElementsByTagName('script')[0];
                s.parentNode.insertBefore(gcse, s);
              })();

      </script>

建议:只需将上面的div和两个脚本放在一个父div中,并仅为父div管理css。

答案 4 :(得分:1)

也许这太简单了,但我只是把它放在javascript的内部和末尾来解决这个问题:

document.write('<gcse:search><\/gcse:search>');

并删除了

适用于IE,Chrome,Firefox和Safari并验证。

答案 5 :(得分:0)

如果您只想使用DIV显示搜索框(没有结果框),请使用以下代码:

<div class="gcse-searchbox-only"></div>

答案 6 :(得分:0)

我遵循了这里的答案,它在@animuson答案中起作用,但是由于新的DIV类,我在Google搜索框中找到了白色背景和边框,因此我编辑了CSS,使其变得透明并且适合任何设计而没有添加背景或边框。

这是解决方案:

.gsc-control-cse {
border-color: transparent!important;
background-color: transparent!important;
}