我有一个使用两个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;也在文档的根部声明。