【问题标题】:XML Validation error : EntityRef: expecting';'XML 验证错误:EntityRef:期待';'
【发布时间】:2014-06-18 19:03:39
【问题描述】:
<url>
  <loc>http://www.ezed.in/ezed/courseDemoIntroPage.do?courseId=COU10000000138003530&checkingCourseFrom=preLogin#.U2DcKvmSySo</loc>
</url>

第 102 行第 103 列的错误:EntityRef:expecting';'

无法弄清楚可能是什么问题。

【问题讨论】:

    标签: xml validation xml-validation


    【解决方案1】:

    您的网址必须转义。

    & 字符在 XML 中用于插入 字符引用,语法为 &amp;name;(注意名称后面的 ;)。解析器需要一个 ; 但它找不到它(有更多可用的分隔符,这只是最常见的情况)。

    然后解决方案转义(如何完成取决于您用于生成该 XML 文件的语言)但最终结果必须是这样的:

    <url>
      <loc>http://www.ezed.in/ezed/courseDemoIntroPage.do?courseId=COU10000000138003530&amp;checkingCourseFrom=preLogin#.U2DcKvmSySo</loc>
    </url>
    

    请注意,普通的 &amp;amp; 已替换为其转义版本 &amp;amp;。更多详情请见this simple article

    另一种可能的解决方案(如果您不想/无法转义)是将 URL 包含在 CDATA section 中,如下所示:

    <url>
      <loc><![CDATA[http://www.ezed.in/ezed/courseDemoIntroPage.do?courseId=COU10000000138003530&checkingCourseFrom=preLogin#.U2DcKvmSySo]]></loc>
    </url>
    

    【讨论】:

    • 对我来说,CDATA 不起作用。但是替换 &非常适合超长 URL。
    • 成功了,非常感谢!只有一个问题:为什么它可以在没有在 localhost 中转义的情况下工作,但它不在生产环境中?
    • 除非url或错误处理不同,否则应该没有任何区别
    【解决方案2】:

    另一种方式如下:

    我们可以使用 htmlspecialchars PHP 本地函数来代替“CDATA”作为 url 节点。它可以在 xml 输出中使用一些他们不希望 CDATA 的 xml 提要,因此这将对某人有所帮助。

    谢谢

    【讨论】:

    • 如果解析器无法解析它 - 你应该如何在节点上运行任何函数?当出现解析器错误时,您根本无法遍历 XML 对象。
    【解决方案3】:

    我今天偶然发现了同样的问题,如果你是用 PHP 建立链接,你可以使用这个函数:

    htmlspecialchars();
    

    它将为您将所需的字符串格式化为 HTML 字符,以便您可以将其插入为 &lt;loc&gt;

    【讨论】:

    猜你喜欢
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多