简体   繁体   English

如何在C ++中针对XSD验证XML节点?

[英]How to Validate an XML Node against an XSD in C++?

Please note that I'm asking for validation against a particular node and not the whole file. 请注意,我要求的是针对特定节点而不是整个文件的验证。 For examples 举些例子

<somexmldoc>
    <someNode>
        <UserDefinedNode> </>
        <UserDefinedNode> </>
    </someNode>
</somexmldoc>

For this XML doc, I have an wholeDoc.XSD which could be used to validate the whole document except "UserDefinedNode" (This node is specified with "any" tag in xsd, which allows a user to define anything under that node). 对于此XML文档,我有一个WholeDoc.XSD,可用于验证整个文档,但“ UserDefinedNode”除外(此节点在xsd中用“ any”标记指定,允许用户在该节点下定义任何内容)。

Is it possible to have a separate userdefined.XSD file to validate "UserDefinedNode"? 是否可以使用单独的userdefined.XSD文件来验证“ UserDefinedNode”? Is it possible to use MSXML for C++ (IXMLDomDocument) to validate this? 是否可以使用C ++的MSXML(IXMLDomDocument)进行验证?

Thanks! 谢谢!

XSD applies to the whole DOM document but not DOM fragment. XSD适用于整个DOM文档,但不适用于DOM片段。 However, as your fragment is also valid XML, why not copy it to another DOM object as the root? 但是,由于您的片段也是有效的XML,为什么不将其作为根复制到另一个DOM对象? You can leverage appendChild or cloneNode to achive this and then validate the new DOM. 您可以利用appendChild或cloneNode达到此目的,然后验证新的DOM。

By the way, if you want to validate a specified DOM fragment, validateNode method is there for you. 顺便说一句,如果您想验证指定的DOM片段,可以使用validateNode方法。

Yes that is possible. 是的,那是可能的。 I would recommend to download Microsoft Core XML Services (MSXML) 6.0 SDK as it has a C++ sample code that shows how to do that. 我建议下载Microsoft Core XML Services(MSXML)6.0 SDK,因为它具有显示如何执行此操作的C ++示例代码。

Should be possible. 应该是可能的。 I found a document called HOW TO: Validate XML Fragments Against an XML Schema in Visual C#.NET for you ( see here ). 在Visual C#.NET中找到了一个名为HOW TO:根据XML Schema验证XML片段的文档请参见此处 )。 That's C#, but you should be able to translate this :-) 那是C#,但是您应该可以翻译一下:-)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM