Как проверить узел XML против XSD в C++?
Обратите внимание, что я прошу о проверке определенного узла, а не всего файла. Например
<somexmldoc>
<someNode>
<UserDefinedNode> </>
<UserDefinedNode> </>
</someNode>
</somexmldoc>
Для этого документа XML у меня есть файл wholeDoc.XSD, который можно использовать для проверки всего документа, кроме "UserDefinedNode" (этот узел указан с тегом "any" в xsd, что позволяет пользователю определять что-либо под этим узлом).
Можно ли иметь отдельный файл userdefined.XSD для проверки "UserDefinedNode"? Можно ли использовать MSXML для C++ (IXMLDomDocument) для проверки этого?
Спасибо!
3 ответа
XSD применяется ко всему документу DOM, но не к фрагменту DOM. Однако, поскольку ваш фрагмент также является допустимым XML, почему бы не скопировать его в другой объект DOM в качестве корневого? Вы можете использовать appendChild или cloneNode, чтобы добиться этого, а затем проверить новый DOM.
Кстати, если вы хотите проверить указанный фрагмент DOM, вам нужен метод validateNode.
Должно быть возможно. Я нашел документ под названием " Как проверить фрагменты XML на схеме XML в Visual C#.NET для вас" ( см. Здесь). Это C#, но вы должны быть в состоянии перевести это:-)
Да, это возможно. Я бы порекомендовал загрузить Microsoft Core XML Services (MSXML) 6.0 SDK, поскольку в нем есть пример кода C++, который показывает, как это сделать.