C# 使用XSD的XML验证在C中不起作用#
我有一个XML,我需要验证它不是和序列,我写了一些代码,但它不工作 XMLC# 使用XSD的XML验证在C中不起作用#,c#,xml,xsd,C#,Xml,Xsd,我有一个XML,我需要验证它不是和序列,我写了一些代码,但它不工作 XML 没有一个 AAA BBB XSD C#代码: public void ValidateXML1() { 列表_errors=新列表(); 尝试 { XmlSchemaSet schemase=新的XmlSchemaSet(); schemas.Add(“http://tempuri.org/NewApplicationSchema.xsd“,_sourceXsd); XDocument doc=XDocument
没有一个
AAA
BBB
XSD
C#代码:
public void ValidateXML1()
{
列表_errors=新列表();
尝试
{
XmlSchemaSet schemase=新的XmlSchemaSet();
schemas.Add(“http://tempuri.org/NewApplicationSchema.xsd“,_sourceXsd);
XDocument doc=XDocument.Load(_sourceXml);
字符串msg=“”;
文档验证(模式,(o,e)=>
{
_错误。添加(e.Message);
msg+=e.Message+Environment.NewLine;
});
}
捕获(例外e)
{
}
}
正如您所看到的,我没有在
XML
中提供
,但是在我的XSD
中,它是minOccures=1
,当我运行此代码时,它验证并显示错误消息=0
,但我预期不提供
值的错误。您的XML文件缺少架构名称空间。换成
<TXLife xmlns="http://tempuri.org/NewApplicationSchema.xsd">
...
</TXLife>
...
您的XML文件缺少架构命名空间。换成
<TXLife xmlns="http://tempuri.org/NewApplicationSchema.xsd">
...
</TXLife>
...
XML是用户输入,那么如何在没有模式的情况下验证它呢?不确定它是否有效,但请尝试schemas.Add(“,_sourceXsd”)
如果XML文档不包含架构中targetnamespace属性中定义的命名空间,它将无法正确验证。因此,您有两个选项更改模式或更改XML。加载XML后,您可以更改代码中的XML,将名称空间强制放入根元素。XML是用户输入,因此如何验证没有架构的XML?不确定它是否可以工作,但请尝试schemas.Add(“,_sourceXsd))
如果XML文档不包含架构中targetnamespace属性中定义的命名空间,它将无法正确验证。因此,您有两个选项更改模式或更改XML。您可以在加载XML后更改代码中的XML,将名称空间强制放入根元素中。
public void ValidateXML1()
{
List<string> _errors = new List<string>();
try
{
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("http://tempuri.org/NewApplicationSchema.xsd", _sourceXsd);
XDocument doc = XDocument.Load(_sourceXml);
string msg = "";
doc.Validate(schemas, (o, e) =>
{
_errors.Add(e.Message);
msg += e.Message + Environment.NewLine;
});
}
catch (Exception e)
{
}
}
<TXLife xmlns="http://tempuri.org/NewApplicationSchema.xsd">
...
</TXLife>