如果我从xmlSchemaNewParserCtxt((开始,解析器很好,可以找到所有引用的模式,但我想知道如果我使用xmlSchemaNewMemParserCtx((,我是否可以告诉它模式在哪里。
问题是,如果我已经在内存中下载了XSD,我可以将文档URL传递给解析器,以便它找到相关的东西吗?
a(
char *urlPath = "http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd";
xmlSchemaNewParserCtxt (urlPath);
b(
xmlSchemaNewMemParserCtxt (schemaBuffer, buffSize);
变体a(运行良好,变体b(产生错误I/O警告:无法加载外部实体"/common/UBL-CommonAggregateComponents-2.1.xsd">
架构位于此处:http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd
最好的解决方案可能是使用XML目录,但您也可以使用xmlRegisterInputCallbacks
或xmlSetExternalEntityLoader
控制子资源的加载。