[英]Validate XML with namesaces via XSD c#
我有一个像这样的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>test@ds.com</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)));
有什么可以帮到我吗?
定义以下方法来验证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;
}
更新:请尝试使用下面的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>test@ds.com</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中更改名称空间,它将显示“无效”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.