我正在使用xerces c ++ 3.2.0来针对XSD 1.1验证XML
根据其docs,xerces使用XPath 2.0的子集而不是完整的XPath检查,因此我需要“启用某些xerces功能”
此功能:
http://apache.org/xml/features/validation/cta-full-xpath-checking
我在XMLUni
中找不到它,所以我自己创建了它:
parser = XMLReaderFactory::createXMLReader();
parser->setFeature(L"http://apache.org/xml/features/validation/cta-full-xpath-checking", true);
现在,当我运行我的代码时,它会崩溃:
XXXXXX.exe中0xXXXXXXXX处未处理的异常:Microsoft C ++异常:内存位置0xXXXXXXXX处xercesc_3_2 :: SAXNotRecognizedException。
它得到的结果与我运行时相同:
parser = XMLReaderFactory::createXMLReader();
parser->setFeature(L"banana gun!", true);
如果我注释掉最后一行,它将起作用,但是不使用完整的XPath检查(即,没有断言)
我在这里想念什么?
请注意,如果我以这种方式设置其他功能(例如,模式全面检查)
parser = XMLReaderFactory::createXMLReader();
parser->setFeature(L"http://apache.org/xml/features/validation/schema-full-checking", true);
它起作用,结果与:
parser = XMLReaderFactory::createXMLReader();
parser->setFeature(XMLUni::fgXercesSchemaFullChecking, true);
,但不具有cta-full-xpath-checking功能。为什么?