使用多个命名空间验证XML

时间:2014-07-22 15:39:46

标签: c# xml xsd

我有一个使用两个XSD的XML文档,我想验证它。 首先,我检索所有使用的XSD并将其添加到XmlSchemaSet中。 接下来,我用XmlReader阅读了我的文档。如果这与只有一个命名空间的Xml完美配合,那么当我尝试使用两个命名空间验证我的XML时,它会失败:

    <element1>
         <LMSG:element2>value</LMSG:element2>
    </element1>

你有解决方法吗?

感谢您的帮助

- 编辑 -

这是我的功能,加载我的所有XSD来验证我的文件(它根据国家标准检索XSD):

    public XmlSchemaSet GetAllXSDUsed(String strCountrySpecific, String strCurrentXSDPath, XmlNode currentNode = null)
    {
        XmlSchemaSet xSet = new XmlSchemaSet();
        if (currentNode == null)
            currentNode = this;

        if (!String.IsNullOrWhiteSpace(currentNode.NamespaceURI))
        {
            String strXsdName = currentNode.NamespaceURI.Substring(currentNode.NamespaceURI.LastIndexOf(':') + 1) + ".xsd";
            String strPath = strCurrentXSDPath;
            XmlSchema schema = null;
            if (!String.IsNullOrWhiteSpace(strCountrySpecific) && File.Exists(Path.Combine(strPath, strCountrySpecific, strXsdName)))
                schema = xSet.Add(currentNode.NamespaceURI, Path.Combine(strPath, strCountrySpecific, strXsdName));
            else if (File.Exists(Path.Combine(strPath, strXsdName)))
                schema = xSet.Add(currentNode.NamespaceURI, Path.Combine(strPath, strXsdName));
        }

        foreach (XmlNode node in currentNode.ChildNodes)
        {
            XmlSchemaSet newxSet = GetAllXSDUsed(strCountrySpecific, strCurrentXSDPath, currentNode: node);
            if (newxSet.Count > 0)
                foreach (XmlSchema xs in newxSet.Schemas())
                    if (!xSet.Contains(xs.TargetNamespace))
                        xSet.Add(xs);
        }

        return xSet;
    }

问题可能是我指定了无处使用的前缀。

以下是我收到的错误:The element 'CBISDDReqLogMsg' has invalid child element 'GrpHdr' in namespace 'urn:CBI:xsd:CBISDDReqLogMsg.00.00.06'. List of possible elements expected: 'GrpHdr'.此块:

    <CBISDDReqLogMsg>
            <LMSG:GrpHdr xmlns:LMSG="urn:CBI:xsd:CBISDDReqLogMsg.00.00.06">
                    <LMSG:MsgId>Value</LMSG:MsgId>

请注意前缀&#39; LMSG&#39;也在文档的根部声明。

0 个答案:

没有答案