我遇到与No matching global declaration available for the validation root类似的问题,但它无法帮助我解决验证XML的问题。 在php.net的评论中,我读到了根元素的子元素也需要命名空间或其他东西。我试过变种,但它不会解决问题,也不会改变信息。有谁知道什么是错的?
libxml Version => 2.7.6
libxml
libxml2 Version => 2.7.6
libxslt compiled against libxml Version => 2.7.6
PHP:
print_r($xml->schemaValidate('customer.xsd'));
错误:
PHP Warning: DOMDocument::schemaValidate():
Element '{http://xxx.de/ecom-customer}customerExport':
No matching global declaration available for the validation root.
XML开头:
<?xml version="1.0" encoding="UTF-8"?>
<xxx:customerExport xmlns:xxx="http://xxx.de/ecom-customer">
<datasource>PROD</datasource>
...
XSD部分:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xxx="http://xxx.de/ecom-customer"
targetNamespace="http://xxx.de/ecom-customer"
jxb:version="2.0">
<xsd:element name="customerExport" type="xxx:customerExport"
xmlns="xxx">
<xsd:annotation>
<xsd:appinfo>
<jxb:class name="CustomerExportRoot" />
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
答案 0 :(得分:2)
您的架构文档应指定您声明命名空间http://xxx/ecom-customer
的元素(和其他内容)。使用根元素上的targetNamespace
属性。
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="..."
>
...
<xs:element name="customerExport">...</xs:element>
...
</xs:schema>
实际上,您的架构声明了一个扩展名为{}customerExport
的元素,而不是扩展名为{http://xxx/ecom-customer}customerExport
的元素。