c# - 未定义的 complexType 用作复杂类型扩展的基础
问题描述
我有一组 .xsd 文件,我试图用它来验证 C# 中的 xml 文件。我收到的错误消息是
未处理的异常。System.Xml.Schema.XmlSchemaValidationException:未定义的 complexType 'myNamespace:CDSInterchange_Structure' 用作复杂类型扩展的基础。
CDSInterchange_Structure
在 root.xsd 中用作扩展名并在 000.xsd 中定义,但我不确定为什么会收到未定义的错误,因为我在 root.xsd 中包含 .xsd 文件
根.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="myNamespace" targetNamespace="myNamespace" elementFormDefault="qualified" attributeFormDefault="unqualified" version="6-2" id="XML_Message-V6-1-1-2010-12-10">
<xs:include schemaLocation="Structures.xsd"/>
<xs:include schemaLocation="000.xsd"/>
<xs:element name="CDS-XMLInterchange" id="CommissioningDataSetInterchange">
<xs:complexType>
<xs:complexContent>
<xs:extension base="CDSInterchange_Structure">
<xs:attribute name="SchemaVersion" type="xs:NMTOKEN" use="required" fixed="6-2">
</xs:attribute>
<xs:attribute name="SchemaDate" type="xs:date" use="required" fixed="2012-05-11">
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:schema>
000.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns="myNamespace" targetNamespace="myNamespace" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:include schemaLocation="Structures.xsd"/>
<xs:complexType name="CDSInterchange_Structure" mixed="false">
<xs:sequence>
<xs:element name="CDSInterchangeHeader" type="ns:CDSInterchangeHeader_Structure"/>
<xs:element name="CDSNetChange-All-MessageTypes" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="CDSMessageHeader" type="ns:CDSMessageHeader_Structure"/>
<xs:element name="CDSTransactionHeader_NetChange" type="ns:CDSTransactionHeader_NetChange_Structure"/>
<xs:element name="CDSMessageTrailer" type="ns:CDSMessageTrailer_Structure"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CDSInterchangeTrailer" type="ns:CDSInterchangeTrailer_Structure"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
还有一个名为 Structures.xsd 的引用文件,我没有将其包括在内,因为它甚至还没有走那么远。这是我正在使用的 C# 验证代码:
public static bool XmlSchemaValidation(string xml, string xsdFilePath)
{
ValidatorLog.Clear();
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(null, xsdFilePath);
settings.ValidationType = ValidationType.Schema;
settings.ValidationEventHandler += new ValidationEventHandler(SettingsValidationEventHandler);
using (var stream = StreamFromString(xml))
{
XmlReader reader = XmlReader.Create(stream, settings);
while (reader.Read()) { }
}
if (ValidatorLog.Errors > 0 || ValidatorLog.Warnings > 0)
{
ValidatorLog.GenerateLogtxt();
Console.WriteLine(DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + $" - {xsdFilePath} schema validation failed. {ValidatorLog.Errors} errors and {ValidatorLog.Warnings} warnings.");
string dateTime = DateTime.Now.ToString("yyyyMMdd-HHmmss");
File.WriteAllText($@"{Path.GetDirectoryName(xsdFilePath)}\log\{dateTime}_Validation_log.txt", ValidatorLog.Logtxt);
return false;
}
else
{
return true;
}
}
static void SettingsValidationEventHandler(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
ValidatorLog.Messages.Add("WARNING: " + e.Message + Environment.NewLine);
ValidatorLog.Warnings++;
Console.WriteLine("WARNING: " + e.Message);
}
else if (e.Severity == XmlSeverityType.Error)
{
ValidatorLog.Messages.Add("ERROR: " + e.Message + Environment.NewLine);
ValidatorLog.Errors++;
Console.WriteLine("ERROR: " + e.Message);
}
}
非常感谢任何帮助我不精通xml。
解决方案
推荐阅读
- react-native - 将带有变量的对象和单独的变量传递给反应本机组件有什么区别?
- python - 我怎么能模仿 Kafka 消费者错过在 Python 中消费一条消息
- node.js - 在 Android 和 Nodejs 之间运行 Socket.io(在 NGINX 后面使用 https)
- c# - 如何在 CRUD Web 应用程序中使用 C#/Razor 动态分配 CSS 类服务器端?
- python - Python:尝试从 Pandas 的 DataFrame 中创建一个矩阵
- c - LLVM-IR 获取结构元素指针
- php - PHP 回显一个多维数组
- python - 吹奏乐器的阻抗
- batch-file - 使用批处理读取文件名
- c++ - 为什么指针仍然可以修改函数内部的 const 引用对象?