使用 XSD 进行 PHP SimpleXMLElement 验证

标签 php xml validation xsd

是否可以使用存储在字符串中的 XSD 模式来验证 SimpleXMLElement?

我通过 CURL 得到这个 xml:

<production_feedback>
        <production_number>DA1100208</production_number>
    <production_status>DONE</production_status>
</production_feedback>

在我这边,我是这样理解的:

if ( $_SERVER['REQUEST_METHOD'] === 'POST' ){

    $post_text = file_get_contents('php://input');

    $xml = new SimpleXMLElement($post_text);

    error_log(print_r($xml , true));
    }

这是在我的 error_log() 中:

SimpleXMLElement Object\n(\n    [production_number] => DA1100208\n    [production_status] => PRODUCTION_IN_PROGRESS\n)\n

所以我可以使用 Xpath 访问数据。这很好用。我想用 XSD 验证它。是否有可能,或者是否有任何其他方法 2 使用 XSD 字符串验证 XML 字符串?

顺便说一句,这是我的 XSD 存储在一个变量中:

$production_XSD ='<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="production_feedback">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="production_number"/>
        <xs:element type="xs:string" name="production_status"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>'

最佳答案

SimpleXMLElement 类不支持(只要 php.net 上的文档是最新的)。

DOMDocument使用 DOMDocument::schemaValidateSource 方法提供您正在寻找的功能。

----原创

XMLReader然而,类具有 setSchema 方法,可用于针对 XSD 文件 进行验证(这不完全是您要查找的内容,但这是我在不依赖任何外部库的情况下发现的内容)

关于使用 XSD 进行 PHP SimpleXMLElement 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12507331/

相关文章:

java - 是否可以在基于 Spring 的控制台应用程序中使用 @Valid 注释?

php - 从 SimpleXML 访问 @attribute

c# - 验证纬度和经度

php - 完整实体进程无法应用进程槽

php - mySQL查询在选择计数时添加条件

c - 如何从 XML 文件中读取多个值并将它们与一个值进行有效比较的示例

xml - 错误 : XML document structures must start and end within the same entity

c++ - 如何防止一个字符串进入一个double变量而把程序搞乱

javascript - 为什么将 %E2%80%8F 添加到我的 Youtube 嵌入代码中?

php - mysqli_real_escape_string 使用环境