【问题标题】:SimpleXML in php set the xml validation restrictionphp中的SimpleXML设置xml验证限制
【发布时间】:2015-08-16 02:07:40
【问题描述】:

我正在寻找 PHP 中的 XML 解析器,我们可以在其中设置 XML 验证的限制级别。基本上,我想以这样一种方式设置 XML 解析器,即解析器不验证值而只验证标签。我试过SimpleXML / DOM 找不到。

更多信息。

例如:

<XMLtag1>
   <XMlTag2>&amp;#1;&amp;#1;&amp;#1;&amp;#1;&amp;#1;/XMlTag2>
   <XMlTag3>&amp;#1;&amp;#1;&amp;#1;&amp;#1;&amp;</XMlTag3>
   <XMlTag3>`Rb&amp;#3;&amp;#3;</XMlTag3>
</XMLtag1>

在上面的 XML 解析器将验证值,它可能会给出一些错误,例如 xmlParseCharRef 我想避免这种情况。

更清楚我的问题

我得到了一个 XML 文件,当我试图解析它时,出现了一个错误,如此处的 stackoverflow 问题所述

XML encoding setup and specific charsets

那边给出的答案让我不满意。所以在这里实际上您可以看到 XML 解析器正在尝试解码 x 格式。我不想要那个。

有什么帮助吗? 谢谢 菲利普。

【问题讨论】:

  • 不知道我明白了。您能否编辑该问题并提供一个您希望验证器忽略的无效 XML 示例?
  • 您可以定义自己的解析器及其规则 - php.net/manual/en/book.xml.php
  • @ÁlvaroG.Vicario :在问题中添加了更多详细信息。
  • 我不明白。您的示例无效只是因为您在&lt;/XMlTag2&gt; 中缺少&lt;。把它加进去,然后SimpleXML parses it without issuing any errors at all。我不知道“验证值”是什么意思。
  • 抱歉,我还是不明白。如果您想要一个不对格式错误的 XML 发出警告且不验证实际值(如“符合给定 XML 模式”)的验证器,您要验证什么?你可以只写一行:function isValid($xml){ return true; }。您是否只是想消耗一些您拥有的无效 XML?

标签: php xml validation simplexml


【解决方案1】:

SimpleXML/DOM 只验证文档格式是否正确——XML 语法是否正确。可以使用 DOM 完成高级验证。

  • DOMDocument::validate() 根据定义的 DTD 验证当前文档
  • DOMDocument::schemaValidate[Source]() 针对给定架构进行验证
  • DOMDocument::relaxNGValidate[Source]() 针对给定的 RelaxNG 进行验证

允许哪些元素、属性和值被定义为 DTD/Schema/RelaxNG。

XML 文档必须格式正确。这不是验证问题,而是如果 XML 包含致命的语法错误,解析器将无法读取它。并不是所有的语法错误都是致命的,如果你对结果没问题,有些可以忽略。

如果 XML 包含致命的语法错误,您将不得不使用字符串函数或正则表达式来修复它们。

【讨论】:

    猜你喜欢
    • 2011-12-29
    • 2015-03-03
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2020-03-03
    相关资源
    最近更新 更多