php - 在 PHP 中查找不匹配的标签时遇到问题

标签 php xml

在我的网站上,我发布了很多用于开发测试的内部跟踪信息。跟踪的内容采用 HTML 格式,这在大多数情况下都很好,但为了支持 AJAX,有时我想将该跟踪数据包含在 XML 文档中。有时 XML 对象存在不匹配的标记,但它仅报告文档中缺少结束标记的位置。这些跟踪文档通常有 10,000 行长,由整个系统的代码生成,因此调试调试信息非常重要。在我当前的问题中,XML 解析报告我缺少结束符

所以我补充说:

libxml_use_internal_errors(true);

$doc = simplexml_load_string($warn);
$xml = explode("\n", $warn);

if (!$doc) {
    $errors = libxml_get_errors();

    foreach ($errors as $error) {
        echo display_xml_error($error, $xml);
    }

    libxml_clear_errors();
} 

到跟踪数据被发送到标准输出的地方。现在我得到:

<p>User::__construct(Array
-^
Fatal Error 5: Extra content at the end of the document
  Line: 2
  Column: 1

--------------------------------------------

    <div id='debugTrace' class='warning'>
      <p>connection established to database server 'mysql:...'.</p>
    <p>User::__construct(Array
    (
    [username] => jcobban
)
)</p>
<p>SELECT * FROM Users WHERE UserName='jcobban'</p><p class='label'>User Record constructed:</p>
... for 9997 more lines

用于将所有跟踪输出包含在类中,并将输出样式设置为深黄色。

Firefox 中的 XML 解析器和 PHP 简单 XML 都同意缺少结束标记

,但我在生成的文档中看到了结束标记,正如我要求 XML 显示页面源代码时所显示的那样。发出明显违规行的代码行是:

    $warn   .= "<p>User::__construct(" . print_r($parms, true) . 
           ")</p>\n";

那我做错了什么?

最佳答案

CDATA 允许您将字符呈现到 xml 文档中,否则会破坏它。

$warn   .= "<p><![cdata[User::__construct(" . print_r($parms, true) . 
       ")]]></p>\n";

有关 SO 的这个非常有用的项目中的更多信息:What does <![CDATA[]]> in XML mean?

关于php - 在 PHP 中查找不匹配的标签时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47024984/

相关文章:

xml - 使用什么算法根据 XSD 验证 XML?

php - 如何使用 PHP 创建保留日文字符的 CSV 文件?

php - 如何将 TinyMCE 编辑器与 php 集成

PhpUnit 在 PhpStorm 中失败,在 Symfony 2 项目中退出代码为 255

php - 安全地实现 "configurable"加入系统

php - UTF-8贯穿始终

xml - web.config 转换 xml 元素

xml - 我可以使用xpath设置属性名称的值吗?

php - 使用 DOMXml 和 Xpath 更新 XML 条目

java - JAXP 可以用来创建 HTML5 文档吗?