Saxon php xml 带有实体引用的模式验证
Saxon php xml schema validation with entity reference
我正在使用 saxon c api EE 版本开发一个 php 应用程序,它需要根据 xsd 模式验证 xml 文件。
我在进行验证时遇到以下错误。
org.xml.sax.SAXParseException; systemId: file:**path**/temp.xml; lineNumber: 6; columnNumber: 48; The entity "nbsp" was referenced, but not declared
我的xml文件内容是
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE section [
<!ENTITY % ent1 SYSTEM "isonum.ent">
]>
<section>
<section-heading>This is a test Heading and & check</section-heading>
<section>
<section-heading>Another sub section heading with and & check</section-heading>
</section>
</section>
xml 中有一个实体文件 isonum.ent
的引用,该文件位于 xml 文件所在的相同路径中。
实体文件有
的定义
<!ENTITY rdquo "”" ><!--=double quotation mark, right-->
<!ENTITY nbsp " " ><!--=no break (required) space-->
<!ENTITY shy "­" ><!--=soft hyphen-->
我的 php 验证码如下
$proc = new Saxon\SaxonProcessor(true);
$proc->setConfigurationProperty("xsdversion", "1.1");
$proc->setConfigurationProperty("http://saxon.sf.net/feature/validationWarnings", "true");
$proc->setConfigurationProperty("http://saxon.sf.net/feature/multipleSchemaImports", "on");
$val = $proc->newSchemaValidator();
$val->registerSchemaFromFile($xsd_path);
$val->setProperty("report-node", "true");
$val->setProperty("verbose", "true");
$val->validate($xml_path);
我参考了 https://www.saxonica.com/saxon-c/documentation/index.html 中可用的文档以及库下载 zip 中提供的示例,但可以确定解决方案..
我怎么能提到架构验证器在哪里寻找实体文件。
也有可能一次得到所有错误,因为在这种情况下,验证只返回一个
问题,因为文件中有两个
。
这原来是一个简单的用户错误。 DTD 声明了一个参数实体但并不引用它,因此参数实体的内容不会成为 DTD 的一部分。需要写成:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE section [
<!ENTITY % ent1 SYSTEM "isonum.ent">
%ent1;
]>
我正在使用 saxon c api EE 版本开发一个 php 应用程序,它需要根据 xsd 模式验证 xml 文件。
我在进行验证时遇到以下错误。
org.xml.sax.SAXParseException; systemId: file:**path**/temp.xml; lineNumber: 6; columnNumber: 48; The entity "nbsp" was referenced, but not declared
我的xml文件内容是
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE section [
<!ENTITY % ent1 SYSTEM "isonum.ent">
]>
<section>
<section-heading>This is a test Heading and & check</section-heading>
<section>
<section-heading>Another sub section heading with and & check</section-heading>
</section>
</section>
xml 中有一个实体文件 isonum.ent
的引用,该文件位于 xml 文件所在的相同路径中。
实体文件有
的定义<!ENTITY rdquo "”" ><!--=double quotation mark, right-->
<!ENTITY nbsp " " ><!--=no break (required) space-->
<!ENTITY shy "­" ><!--=soft hyphen-->
我的 php 验证码如下
$proc = new Saxon\SaxonProcessor(true);
$proc->setConfigurationProperty("xsdversion", "1.1");
$proc->setConfigurationProperty("http://saxon.sf.net/feature/validationWarnings", "true");
$proc->setConfigurationProperty("http://saxon.sf.net/feature/multipleSchemaImports", "on");
$val = $proc->newSchemaValidator();
$val->registerSchemaFromFile($xsd_path);
$val->setProperty("report-node", "true");
$val->setProperty("verbose", "true");
$val->validate($xml_path);
我参考了 https://www.saxonica.com/saxon-c/documentation/index.html 中可用的文档以及库下载 zip 中提供的示例,但可以确定解决方案..
我怎么能提到架构验证器在哪里寻找实体文件。
也有可能一次得到所有错误,因为在这种情况下,验证只返回一个
问题,因为文件中有两个
。
这原来是一个简单的用户错误。 DTD 声明了一个参数实体但并不引用它,因此参数实体的内容不会成为 DTD 的一部分。需要写成:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE section [
<!ENTITY % ent1 SYSTEM "isonum.ent">
%ent1;
]>