5

是否可以使用存储在字符串中的 XSD shema 验证 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>'
4

2 回答 2

5

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

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

- - 原来的

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

于 2012-09-20T06:59:11.783 回答
0

我最近需要针对 XSD 文件验证包含 XML 字符串的 var,因此如果其他人正在寻找此解决方案,请参见下文:

// $xml_feed is a string containing your XML content
// validate xml string with xsd file
$doc = new DOMDocument();
$doc->loadXML($xml_feed); // load xml
$is_valid_xml = $doc->schemaValidate('XSDs/FeedFile.xsd'); // path to xsd file

if (!$is_valid_xml){
    echo '<b>Invalid XML:</b> validation failed<br>';
}else{
    echo '<b>Valid XML:</b> validation passed<br>';
}

如果您还将 XSD 存储在字符串中,请将“XSDs/FeedFile.xsd”替换为包含您的 XSD 的 var。希望有人觉得这有帮助!

于 2017-04-22T06:42:50.190 回答