我一直在考虑将Saxon 9.6用作XSD断言的XSD 1.1验证器。是否可以使用Saxon验证器定义我自己的错误消息(而不是默认消息)?
答案 0 :(得分:1)
我想到了几种机制。
首先,您可以定义与断言相关的自己的消息,以及其他方面:
http://www.saxonica.com/documentation/index.html#!schema-processing/extensions11/saxon.message
其次,您可以将所有验证消息发送到XML报告文件,然后可以转换该文件。在验证命令行上使用RecordRec *DataRec = ...;
std::wstring DataSt;
if (DataRec->St)
{
HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, TheDelphiAppProcessID);
int len = 0;
SIZE_T numRead = 0;
ReadProcessMemory(hProcess, LPBYTE(DataRec->St)-4, &len, 4, &numRead);
if (len > 0)
{
DataSt.resize(len);
ReadProcessMemory(hProcess, DataRec->St, &DataSt[0], len*2, &numRead);
}
CloseHandle(hProcess);
}
// use DataSt as needed...
,或在s9api API中使用-report:filename
。报告文件的格式由SchemaValidator.setValidityReporting()
下载文件中提供的模式定义。
您可以使用@kjhughes建议的saxon-resources.zip
- 传递给ErrorListener的ErrorListener
对象中的错误信息是一种结构化形式 - 但是(a)我认为XML报告是更容易操作,(b)我们发现在验证运行中报告了几百个错误,ValidationException
接口所需的创建异常对象的成本可能是整个运行时间的重要部分。 Java Exceptions并非真正用于此目的。