C# 如何处理无效的子元素?
我有几个XML是这样的:C# 如何处理无效的子元素?,c#,xml,io,C#,Xml,Io,我有几个XML是这样的: -<PURCHASE xmlns:odf="urn:xmlns:eAccepta:output-data-fields"> -<PO TYPE="PURCHASEORDER"> <CUSTPONUM>PO0000</CUSTPONUM> <CUSTNUM/> <CUSTNAME>Custom name</CUSTNAME> <DATE>2014-01-06<
-<PURCHASE xmlns:odf="urn:xmlns:eAccepta:output-data-fields">
-<PO TYPE="PURCHASEORDER">
<CUSTPONUM>PO0000</CUSTPONUM>
<CUSTNUM/>
<CUSTNAME>Custom name</CUSTNAME>
<DATE>2014-01-06</DATE>
<CUSTPREFIX>5LAN</CUSTPREFIX>
<MEMO/>
</PO>
-<POLINES>
-<LINE>
<LINENUM>0</LINENUM>
<CUSTLINE>1</CUSTLINE>
<CUSTITEM>013169</CUSTITEM>
<ITEMREV>A</ITEMREV>
<DESCRIPTION>Description</DESCRIPTION>
<QTY>2</QTY>
<PRICE>46.14</PRICE>
<DUEDATE>2014-01-30</DUEDATE>
<OURITEM>gfd4fd</OURITEM>
<CUSTREF>013169</CUSTREF>
<ITEMMEMO/>
</LINE>
</POLINES>
</PURCHASE>
public void ValidateXmlDocument(string documentToValidate, string schemaPath)
{
XmlSchema schema;
using (var schemaReader = XmlReader.Create(@"C:\XML\XMLSchema.xsd"))
{
schema = XmlSchema.Read(schemaReader, ValidationEventHandler);
}
var schemas = new XmlSchemaSet();
schemas.Add(schema);
var settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas = schemas;
settings.ValidationFlags =
XmlSchemaValidationFlags.ProcessIdentityConstraints |
XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += ValidationEventHandler;
using (var validationReader = XmlReader.Create(documentToValidate, settings))
{
while (validationReader.Read())
{
Console.WriteLine("ValidateXmlDocument ok");
}
}
}
private static void ValidationEventHandler(
object sender, ValidationEventArgs args)
{
if (args.Severity == XmlSeverityType.Error)
{
throw args.Exception;
}
Console.WriteLine(args.Message);
}
我得到的错误是
The element 'POLINES' has invalid child element 'LINE'.
当我使用免费的在线XML验证器进行验证时,它告诉我XML对XSD文件是完全完美的。
尽管我的代码不断给我错误。至少有一个问题是您对条目子元素的排序不正确。序列标记中定义的元素必须以相同的顺序出现在相应的XML文档中 在根据模式验证示例XML之后,这是我看到的唯一问题 编辑: 如果您无法控制输入文件的元素顺序&它是不一致的&条目的每个子元素在每个条目中最多只能出现一次,那么您可能希望使用该元素而不是顺序
我自己把
改成
希望有一天这能帮到别人。这不是一个选项,因为可能会发生多次。如果显示0或1次,则可以使用“all”。而且我的子元素的顺序都与我的XSD对应。。
The element 'POLINES' has invalid child element 'LINE'.