为什么XML对XSD有效? [英] Why XML is valid against XSD?

查看:72
本文介绍了为什么XML对XSD有效?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我的XML验证有问题。 XSD架构不是这个xml,但验证是真的吗? XSD有什么问题?



XSD:

Hi,
I have a problem with XML validation. The XSD schema is not to this xml, but validation is true? What is wrong in XSD?

XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://winuel.com.pl/2007/pwi/documents" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Dokument">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Naglowek">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="typDokumentu" type="xs:string" />
              <xs:element name="numerDokumentu" type="xs:string"  />
              <xs:element name="dataDokumentu" type="xs:dateTime"  />
              <xs:element name="nazwaSprzedawcy" type="xs:string"  />
              <xs:element name="kodSprzedawcy" type="xs:string"  />
              <xs:element name="kodMDD" type="xs:string" />
              <xs:element name="kodURB" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="Tresc">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Liczniki">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="DaneLicznika">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="kodPPE" type="xs:string" />
                          <xs:element name="nrLicznika" type="xs:unsignedInt" />
                          <xs:element name="Wskazania">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element maxOccurs="unbounded" minOccurs="1" name="Wskazanie">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="okresRozliczeniowyOd" type="xs:date" />
                                      <xs:element name="okresRozliczeniowyDo" type="xs:date" />
                                      <xs:element name="strefa" type="xs:string" />
                                      <xs:element name="WF" type="xs:string" minOccurs="1" />
                                      <xs:element name="wskazaniePoprzednie" type="xs:decimal" />
                                      <xs:element name="wskazanieBiezace" type="xs:decimal" />
                                      <xs:element name="mnozna" type="xs:decimal" />
                                      <xs:element name="zuzycie_Pmax" type="xs:decimal" />
                                      <xs:element name="strataProcent" type="xs:decimal" />
                                      <xs:element name="zuzycieZUwzglednieniemStrat" type="xs:decimal" />
                                      <xs:element name="rozklad" type="xs:string" />
                                      <xs:element name="kodOT" type="xs:string" />
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>





XML:





XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Dokument xmlns:ns2="http://winuel.com.pl/2007/pwi/documents">
    <ns2:Naglowek>
        <ns2:numerDokumentu>dssdsdsdsdsdsdsd</ns2:numerDokumentu>
        <ns2:dataDokumentu>2012-11-07T10:42:47.704+01:00</ns2:dataDokumentu>
        <ns2:nazwaSprzedawcy>aaa</ns2:nazwaSprzedawcy>
        <ns2:kodSprzedawcy>bbbb</ns2:kodSprzedawcy>
        <ns2:kodURB>cccc</ns2:kodURB>
        <ns2:kodMB>rrrr333</ns2:kodMB>
        <ns2:aaa></ns2:aaa>
    </ns2:Naglowek>
    <ns2:Tresc>
        <ns2:Liczniki>
            <ns2:DaneLicznika>
                <ns2:kodPPE>PL_ZEBB_0000000_09</ns2:kodPPE>
                <ns2:nrLicznika>13139609</ns2:nrLicznika>
                <ns2:rolaLicznika>R</ns2:rolaLicznika>
                <ns2:Wskazania>
                    <ns2:Wskazanie>
                        <ns2:okresRozliczeniowyOd>2012-09-20T11:52:00+02:00</ns2:okresRozliczeniowyOd>
                        <ns2:okresRozliczeniowyDo>2012-10-22T14:12:00+02:00</ns2:okresRozliczeniowyDo>
                        <ns2:strefa>poza szczytem</ns2:strefa>
                        <ns2:wskazaniePoprzednie>136821</ns2:wskazaniePoprzednie>
                        <ns2:wskazanieBiezace>138696</ns2:wskazanieBiezace>
                        <ns2:mnozna>1</ns2:mnozna>
                        <ns2:zuzycie>1875</ns2:zuzycie>
                        <ns2:strataProcent>0</ns2:strataProcent>
                        <ns2:zuzycieZUwzglednieniemStrat>1875</ns2:zuzycieZUwzglednieniemStrat>
                        <ns2:kierunek>Pobór</ns2:kierunek>
                        <ns2:pochodzenie>F</ns2:pochodzenie>
                        <ns2:informacjeDodatkowe></ns2:informacjeDodatkowe>
                    </ns2:Wskazanie>
                    <ns2:Wskazanie>
                        <ns2:okresRozliczeniowyOd>2012-09-20T11:52:00+02:00</ns2:okresRozliczeniowyOd>
                        <ns2:okresRozliczeniowyDo>2012-10-22T14:12:00+02:00</ns2:okresRozliczeniowyDo>
                        <ns2:strefa>szczyt</ns2:strefa>
                        <ns2:wskazaniePoprzednie>39089</ns2:wskazaniePoprzednie>
                        <ns2:wskazanieBiezace>39724</ns2:wskazanieBiezace>
                        <ns2:mnozna>1</ns2:mnozna>
                        <ns2:zuzycie>635</ns2:zuzycie>
                        <ns2:strataProcent>0</ns2:strataProcent>
                        <ns2:zuzycieZUwzglednieniemStrat>635</ns2:zuzycieZUwzglednieniemStrat>
                        <ns2:kierunek>Pobór</ns2:kierunek>
                        <ns2:pochodzenie>F</ns2:pochodzenie>
                        <ns2:informacjeDodatkowe></ns2:informacjeDodatkowe>
                    </ns2:Wskazanie>
                </ns2:Wskazania>
            </ns2:DaneLicznika>
            <ns2:DaneLicznika>
                <ns2:kodPPE>PL_ZEBB_sasswe3232_09</ns2:kodPPE>
                <ns2:nrLicznika>425.0003441</ns2:nrLicznika>
                <ns2:rolaLicznika>R</ns2:rolaLicznika>
                <ns2:Wskazania>
                    <ns2:Wskazanie>
                        <ns2:okresRozliczeniowyOd>2012-10-01T00:00:00+02:00</ns2:okresRozliczeniowyOd>
                        <ns2:okresRozliczeniowyDo>2012-11-01T00:00:00+01:00</ns2:okresRozliczeniowyDo>
                        <ns2:strefa>Cala doba</ns2:strefa>
                        <ns2:wskazaniePoprzednie>4975.253</ns2:wskazaniePoprzednie>
                        <ns2:wskazanieBiezace>5331.803</ns2:wskazanieBiezace>
                        <ns2:mnozna>100</ns2:mnozna>
                        <ns2:zuzycie>35655.000</ns2:zuzycie>
                        <ns2:strataProcent>0</ns2:strataProcent>
                        <ns2:zuzycieZUwzglednieniemStrat>35655</ns2:zuzycieZUwzglednieniemStrat>
                        <ns2:kierunek>Pobór</ns2:kierunek>
                        <ns2:pochodzenie>Z</ns2:pochodzenie>
                        <ns2:informacjeDodatkowe></ns2:informacjeDodatkowe>
                    </ns2:Wskazanie>
                </ns2:Wskazania>
            </ns2:DaneLicznika>
            <ns2:DaneLicznika>
                <ns2:kodPPE>PL_ZEBB_dsdsdsdsd22_01</ns2:kodPPE>
                <ns2:nrLicznika>13710068</ns2:nrLicznika>
                <ns2:rolaLicznika>R</ns2:rolaLicznika>
                <ns2:Wskazania>
                    <ns2:Wskazanie>
                        <ns2:okresRozliczeniowyOd>2012-10-01T00:00:00+02:00</ns2:okresRozliczeniowyOd>
                        <ns2:okresRozliczeniowyDo>2012-11-01T00:00:00+01:00</ns2:okresRozliczeniowyDo>
                        <ns2:strefa>Cala doba</ns2:strefa>
                        <ns2:wskazaniePoprzednie>3192.4820</ns2:wskazaniePoprzednie>
                        <ns2:wskazanieBiezace>3239.5850</ns2:wskazanieBiezace>
                        <ns2:mnozna>60</ns2:mnozna>
                        <ns2:zuzycie>2826.18</ns2:zuzycie>
                        <ns2:strataProcent>0</ns2:strataProcent>
                        <ns2:zuzycieZUwzglednieniemStrat>2826.18</ns2:zuzycieZUwzglednieniemStrat>
                        <ns2:kierunek>Pobór</ns2:kierunek>
                        <ns2:pochodzenie>Z</ns2:pochodzenie>
                        <ns2:informacjeDodatkowe></ns2:informacjeDodatkowe>
                    </ns2:Wskazanie>
                </ns2:Wskazania>
            </ns2:DaneLicznika>
        </ns2:Liczniki>
    </ns2:Tresc>
</Dokument>





Validation in c#:





Validation in c#:

private static bool checkXmlSchema(string XSDFILEPATH, string path, ref string error)
       {
           try
           {

               //xsd localization
             //   XSDFILEPATH = "aaa.xsd";
               //xml localization
              //  path = "bbb.xml";
               XmlDocument document = new XmlDocument();
               document.Load(path);

               XmlReaderSettings settings = new XmlReaderSettings();
               settings.Schemas.Add(null, XSDFILEPATH);
               settings.ValidationType = ValidationType.Schema;

               XmlReader rdr = XmlReader.Create(new StringReader(document.InnerXml), settings);
               while (rdr.Read()) { }
               //zwroc format xml'a
               return true;
           }
           catch (Exception ex)
           {
               //zwróc błąd parsowania xml'a
               error = ex.Message;
               return false;
           }
       }



Thanks in advance for the answer.


Thanks in advance for the answer.

推荐答案

check this article



Simple code to validate an XML file against a schema file (XSD)[^]
check this article

Simple code to validate an XML file against a schema file (XSD)[^]


这篇关于为什么XML对XSD有效?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆