Как проверить узел 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++, который показывает, как это сделать.

Другие вопросы по тегам