Я использую xerces c ++ 3.2.0 для проверки XML на соответствие XSD 1.1
Согласно его документам , 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);
Теперь, когда я запускаю свой код, он вылетает:
Необработанное исключение в 0xXXXXXXXX в XXXXXX.exe: исключение Microsoft C ++: xercesc_3_2 :: SAXNotRecognizedException в расположении памяти 0xXXXXXXXX.
Он получает тот же результат, что и при запуске:
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-проверяяе .почему?