在Haskell中验证XML文件可以正常使用 HXT 和 Relax NG ,除了一件事:我怎样才能得到结果?
使用以下代码,XML文件xmlFilename
将根据Relax NG方案rngFilename
进行验证。如果出现错误,则会向stderr
输出错误,评估将继续。
v <- runX
( readDocument
[ withRemoveWS yes -- remove redundant whitespace
, withValidate no -- don't validate source by DTD
] xmlFilename
>>>
-- validate source by Relax NG
validateDocumentWithRelaxSchema [] rngFilename
)
如果出现错误,变量v
根据the hxt-relaxng documentation保存以下信息:
如果验证错误,则在根[输出]
中显示状态信息的空文档
带有错误文档的结果树实际上包含status
(和module
)属性:
NTree (XAttr "module") [NTree (XText "validate document with Relax NG schema") []],
NTree (XAttr "status") [NTree (XText "2") []]
现在问题:
如何检查validateDocumentWithRelaxSchema
的输出是否存在验证错误?
我可以使用预定义的功能(但还没有找到)吗?
答案 0 :(得分:1)
好的,我自己找到了答案:
HXT错误处理位于Text.XML.HXT.Arrow.XmlState.ErrorHandling,其中包含有趣的函数getErrStatus
。
v <- runX
( readDocument
[ withRemoveWS yes -- remove redundant whitespace
, withValidate no -- don't validate source by DTD
] xmlFilename
>>>
-- validate source by Relax NG
validateDocumentWithRelaxSchema [] rngFilename
>>>
getErrStatus
)
case v of
--severity [0]=[c_ok]
[0] -> --continue processing
--severity: [1]=[c_warn], [2]=[c_err], [3]=[c_fatal], else=something_really_really_bad_happened
_ -> --do error handling