c - 验证 XML 文档无法加载使用原始 XSD 文档中的相对路径引用的架构
问题描述
如果我从 xmlSchemaNewParserCtxt() 开始,解析器很好,可以找到所有引用的模式,但我想知道如果我使用 xmlSchemaNewMemParserCtxt(),我是否能以某种方式告诉它模式在哪里。
问题是,如果我已经在内存中下载了 XSD,我可以将文档 URL 传递给解析器,以便它找到相关的东西吗?
一个)
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”
解决方案
xmlRegisterInputCallbacks
最好的解决方案可能是使用 XML 目录,但您也可以使用或控制子资源的加载xmlSetExternalEntityLoader
。
推荐阅读
- javascript - 无法在 React 表单中提交所有数据
- typescript - 确保字符串文字联合属于对象的键
- powerbi - 带有分发列表的 Power BI RLS 不起作用
- c - 使用 OpenSSL 进行高性能 HMAC 计算
- flutter - 在屏幕顶部颤动BottomSheet?
- amazon-ec2 - grafana ec2-instance 按标签过滤
- html - 将脚本生成的 HTML 发送到具有正确表格边距的 Google Doc
- java - 按照创建顺序给定一个所需字符串的数组。由于两个字符串不能相等,因此替换它对它们进行版本控制
- android - 如何在 Exoplayer 通知中设置自定义布局和字体?
- c# - ASP.NET MVC 找不到我的控制器方法