2014-10-11 56 views
0

我有一個XML文件是這樣的:驗證XML通過XSD C#namesaces

<?xml version="1.0" encoding="UTF-8"?> 
<ns0:Prowadzacy xmlns:ns0="http://test.com/xi/prowizja/CODO"> 
    <LIFNR>test</LIFNR> 
    <NAME>test</NAME> 
    <SMTP_ADR>[email protected]</SMTP_ADR> 
    <CALC_RULE>M</CALC_RULE> 
    <STATIONS> 
     <NUMBER>test</NUMBER> 
     <LOCATION>test</LOCATION> 
     <KDATB>test</KDATB> 
     <KDATE/> 
    </STATIONS> 
    <STATIONS> 
     <NUMBER>test</NUMBER> 
     <LOCATION>test</LOCATION> 
     <KDATB>test</KDATB> 
     <KDATE>test</KDATE> 
    </STATIONS> 
</ns0:Prowadzacy> 

和XSD像這樣(我後只XSD的頭):

<xsd:schema targetNamespace="http://orlen.pl/xi/prowizja/CODO" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://orlen.pl/xi/prowizja/CODO"> 
    <xsd:complexType name="Prowadzacy"> 
     <xsd:sequence> 

我需要用這個xsd驗證XML,我試圖這樣做,並得到關於沒有元素「ns0:Prowadzacy」的錯誤,我想我需要刪除此屬性(或驗證中的命名空間)?

private static XNamespace xn = "http://orlen.pl/xi/prowizja/CODO"; 
schemaSet.Add(xn.ToString(), XmlReader.Create(new StringReader(xsd))); 

能幫助我嗎?

+0

您是否使用XSD.EXE生成了它? – Aybe 2014-10-11 09:44:34

+0

我的任務來驗證它,我認爲問題屬性「ns0」 – NoNameR 2014-10-11 09:48:09

回答

0

定義一個方法來驗證xml。

public static bool ValidateXml(string schemaFilePath, string xmlFilePath) 
    { 
     bool isValidXml = true; 
     var doc = XDocument.Load(xmlFilePath); 
     var schemas = new XmlSchemaSet(); 
     const string xn = "http://orlen.pl/xi/prowizja/CODO"; 
     schemas.Add(xn, XmlReader.Create(schemaFilePath)); 
     doc.Validate(schemas, (o, e) => 
     { 
      Console.WriteLine("{0}", e.Message); 
      isValidXml = false; 
     }); 
     Console.WriteLine("doc {0}", isValidXml ? "validated" : "did not validate"); 

     return isValidXml; 
    } 

UPDATE:請在下面XSD和XML嘗試。我已經根據需要創建了名稱。

XSD:

<xs:schema targetNamespace="http://orlen.pl/xi/prowizja/CODO" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://orlen.pl/xi/prowizja/CODO"> 
    <xs:element name="LIFNR" type="xs:string"/> 
    <xs:element name="NAME" type="xs:string"/> 
    <xs:element name="SMTP_ADR" type="xs:string"/> 
    <xs:element name="CALC_RULE" type="xs:string"/> 
    <xs:element name="STATIONS"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element type="xs:string" name="NUMBER"/> 
     <xs:element type="xs:string" name="LOCATION"/> 
     <xs:element type="xs:string" name="KDATB"/> 
     <xs:element type="xs:string" name="KDATE"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<ns0:Prowadzacy xmlns:ns0="http://test.com/xi/prowizja/CODO"> 
    <LIFNR>test</LIFNR> 
    <NAME>test</NAME> 
    <SMTP_ADR>[email protected]</SMTP_ADR> 
    <CALC_RULE>M</CALC_RULE> 
    <STATIONS> 
    <NUMBER>test</NUMBER> 
    <LOCATION>test</LOCATION> 
    <KDATB>test</KDATB> 
    <KDATE/> 
    </STATIONS> 
    <STATIONS> 
    <NUMBER>test</NUMBER> 
    <LOCATION>test</LOCATION> 
    <KDATB>test</KDATB> 
    <KDATE>test</KDATE> 
    </STATIONS> 
</ns0:Prowadzacy> 

注:現在,如果你在XML命名空間的改變,它會說 「無效」。

+0

嘗試設置「Prowadzacy」到其他值在xml中,並驗證 – NoNameR 2014-10-11 11:25:43

+0

我的方法完全相同,我得到關於「ns0:Prowadzacy」的錯誤。 ..prefix「ns0」發生此錯誤。我需要從驗證中排除它,你可以用什麼方式做到這一點?我需要使用上面提供的thoose xsd ... – NoNameR 2014-10-11 16:56:57