提问人:aprotiere 提问时间:6/24/2023 最后编辑:aprotiere 更新时间:6/27/2023 访问量:35
无法将架构添加到架构集合
Can't add a schema to a schema collection
问:
介绍:
我不是C++专家,也不是MSXML专家,这就是为什么我试图从尽可能简单的事情开始,例如获取一些文档示例代码并尝试修改一些参数。
事情是这样的,我正在使用此示例来验证一些 XML 文件是否符合 XSD 模式。 代码在我的计算机上运行良好,只要我保持代码完全相同,它就会执行它应该做的事情。
因此,我想稍微修改一下这段代码,以便我可以根据自己的 XSD 架构验证我自己的 XML 文件。
什么是有效的:
因此,此代码可以完美地处理这些文件。这至少证明我对我的环境或我的库没有问题。
我改变了什么:
一旦我修改代码以使其验证我自己的文件,它就不再起作用了。 以下是我更改的几行:
这:CHK_HR(VariantFromString(L"books.xml", varXMLFileName));
变成了这样:CHK_HR(VariantFromString(L"facturx.xml", varXMLFileName));
这:CHK_HR(VariantFromString(L"books.xsd", varXSDFileName));
变成了这样:CHK_HR(VariantFromString(L"cii.xsd", varXSDFileName));
这:bstr = SysAllocString(L"urn:books");
变成了这样:bstr = SysAllocString(L"urn:un:unece:uncefact:data:crossindustry:3:draft");
没什么了不起的,我只是在更改文件输入。 另外,我的文件应该很干净:
什么不起作用:
因此,从现在开始,通过这些修改后的行,代码将停止在这一行:
CHK_HR(pSCache->add(bstr, varXSDObject));
当程序运行此行时,它将停止。当然,当我使用示例文件时,这种情况从未发生过。
我尝试过的:
我试图查看我的输入文件,看看它们是否有明显的错误,导致代码崩溃,但我找不到任何问题。我还尝试过其他一些文件,但仍然不起作用。
我试图在这一行周围放置一个 try/catch(...) 块以查看错误是什么,但它甚至没有触发 catch 块,程序只是崩溃而没有错误或没有堆栈跟踪。
我试图查看 stackoverflow 中的文档或其他帖子,但我找不到任何相关内容。
编辑:我设法通过从这里更改宏来打印错误消息:
// Macro that calls a COM method returning HRESULT value.
#define CHK_HR(stmt) do { hr=(stmt); if (FAILED(hr)) goto CleanUp; } while(0)
对此:
// Macro that calls a COM method returning HRESULT value.
#define CHK_HR(stmt) do { hr=(stmt); if (FAILED(hr)) {std::string message = std::system_category().message(hr);std::cout << message; goto CleanUp;} } while(0)
错误消息是:Unspecified error
我怎么知道问题出在哪里......
我在问什么:
所以,我有几个问题,如果我能有一个答案,那会很有帮助:
我可以尝试什么来确定问题的来源?正如我所说,我不是C++专家,所以我真的不知道最好的调试方法。变量内容难以理解,我无法让它引发异常或堆栈跟踪。
问题出在我的代码还是我的文件上?
问题是什么?
我有点绝望,因为仅仅获取示例代码并对其进行修改应该不难,但看起来比预期的要难。
答: 暂无答案
评论
xs:import
xs:include
resolveExternals
(*ppDoc)->put_resolveExternals(VARIANT_TRUE);
xs:include