如何处理无效的子元素?

马塞诺

我有几个这样的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</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>

从这个XML中,我生成了一个XSD:

<?xml version="1.0" encoding="utf-16"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="PURCHASE">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="PO">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="CUSTPONUM" type="xsd:string" />
              <xsd:element name="CUSTNUM" type="xsd:string" />
              <xsd:element name="CUSTNAME" type="xsd:string" />
              <xsd:element name="DATE" type="xsd:dateTime" />
              <xsd:element name="CUSTPREFIX" type="xsd:string" />
              <xsd:element name="MEMO" type="xsd:string" />
            </xsd:sequence>
            <xsd:attribute name="TYPE" type="xsd:string" />
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="POLINES">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="LINE">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="LINENUM" type="xsd:int" />
                    <xsd:element name="CUSTLINE" type="xsd:int" />
                    <xsd:element name="CUSTITEM" type="xsd:int" />
                    <xsd:element name="ITEMREV" type="xsd:string" />
                    <xsd:element name="DESCRIPTION" type="xsd:string" />
                    <xsd:element name="QTY" type="xsd:int" />
                    <xsd:element name="PRICE" type="xsd:decimal" />
                    <xsd:element name="DUEDATE" type="xsd:dateTime" />
                    <xsd:element name="OURITEM" type="xsd:string" />
                    <xsd:element name="CUSTREF" type="xsd:int" />
                    <xsd:element name="ITEMMEMO" type="xsd:string" />
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

现在,我的代码不断抱怨这是一个无效的子元素。我从外部应用程序获取XML,因此无法更改任何XML。

我处理XML的代码如下所示:

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文件而言是完全完美的。虽然我的代码不断给我错误。

马塞诺

我自己<xsd:element name="LINE">改成<xsd:element maxOccurs="unbounded" name="LINE">

希望有一天能对某人有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何处理元素中的鼠标事件,而不处理其子元素之一?

来自分类Dev

如何处理子流

来自分类Dev

如何处理未捕获的错误:对象作为React子错误无效

来自分类Dev

如何处理无效数字和.catch()

来自分类Dev

如何处理无效的承载令牌

来自分类Dev

如何处理异常“指定的转换无效”

来自分类Dev

如何处理java中的无效输入

来自分类Dev

如何处理子页面上的多个h1元素

来自分类Dev

我该如何处理无效的异常处理程序例程?

来自分类Dev

如何处理异步作业的子批次?

来自分类Dev

如何处理GitFlow和子任务

来自分类Dev

子进程如何处理文件指针?

来自分类Dev

如何处理GitFlow和子任务

来自分类Dev

如何处理异步作业的子批次?

来自分类Dev

如何处理递归函数的元素?

来自分类Dev

XSLT如何处理多个嵌套元素?

来自分类Dev

如何处理目标元素类型列表?

来自分类Dev

如何处理不同元素的冒泡事件?

来自分类Dev

如何处理REST服务中的无效参数?

来自分类Dev

如何处理从“ DBNull”类型到“ Integer”类型的转换无效

来自分类Dev

如何处理警报对话框中的无效输入?

来自分类Dev

如何处理无效的zlib字节的dart exepiton

来自分类Dev

如何处理RabbitMQ中未知/无效的绑定路由键值?

来自分类Dev

如何处理警报对话框中的无效输入?

来自分类Dev

如何处理“:”或“?”之类的字符 使无效的文件名?

来自分类Dev

gWidgets如果窗口关闭,如何处理无效引用

来自分类Dev

如何处理FileInput中无效的utf8?

来自分类Dev

如何处理ValueError:Python中float()的无效文字

来自分类Dev

如何处理来自两个文件的无效路由

Related 相关文章

热门标签

归档