我有一个简单的XML,我们生成一个与供应商的XSD相匹配的XML,但是,在使用<deletePLU>而不是<domain:deletePLU>的文档中有一个错误。
XSD使用目标命名空间:
<xs:schema xmlns:domain="urn:vfi-sapphire:np.domain.2001-07-01"
elementFormDefault="unqualified"
targetNamespace="urn:vfi-sapphire:np.domain.2001-07-01"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="PLUs"> ...代码没有提到这一点,我也不知道为什么。
,我假设在缺少的域名称空间中,"deletePLU“被归因于没有模式?的defautl命名空间。
<?xml version="1.0"?>
<domain:PLUs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:domain="urn:vfi-sapphire:np.domain.2001-07-01" page="1" ofPages="1">
<domain:PLU>
<upc>00853288005119</upc>
<upcModifier>0</upcModifier>
<description>SIX PACKS</description>
<department>2</department>
<fee>0</fee>
<pcode>0</pcode>
<price>10.19</price>
<taxRates>
<domain:taxRate sysid="2"/>
</taxRates>
<idChecks>
<domain:idCheck sysid="2"/>
</idChecks>
<SellUnit>1.000</SellUnit>
</domain:PLU>
<deletePLU>
<upc>00751249241128</upc>
<upcModifier>0</upcModifier>
</deletePLU>
<domain:PLUs>验证代码如下所示:(在重写验证之前我确实使用了XDocument和XmlSchemaSet,但都没有工作)
// configure the xmlreader validation to use inline schema.
var config = new XmlReaderSettings { ValidationType = ValidationType.Schema };
config.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
config.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
config.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
var b = new StringBuilder();
config.ValidationEventHandler += ( sender, vea ) =>
{
...
};
config.Schemas = schemas;
try
{
// Get the XmlReader object with the configured settings.
var reader = XmlReader.Create( xmlDocFile.FullName, config );
// Parsing the file will cause the validation to occur.
while ( reader.Read() );
}
catch ( Exception e )
{...}如何确保文档的错误被发现?
谢谢!
发布于 2015-04-06 10:37:34
由于我不确定如何更详细地解释这个问题,所以我发现如何使这个XSD验证像预期的那样工作。
使用读取器设置如下:
var config = new XmlReaderSettings
{
ValidationType = ValidationType.Schema,
ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings,
DtdProcessing = DtdProcessing.Ignore,
ConformanceLevel = ConformanceLevel.Document
};
config.ValidationEventHandler += ConfigOnValidationEventHandler;
config.Schemas = schemas;重要的是您没有指定targetNamespace。我用了超负荷XmlShemaSet.Add(string targetNamespace, string schemaUri)。
schemas.Add( null, "c:\test\mySchema.xsd" );我希望这对其他人有帮助。
发布于 2015-04-03 15:07:24
来自, table with XmlReaderSettings (重点雷):
ValidationEventHandler事件 用于接收有关验证事件的信息的事件处理程序。如果没有提供事件处理程序,则在第一个验证错误时抛出一个XmlException。。
由于您指定了一个ValidationEventHandler,所以XmlReader调用处理程序,但不会抛出。
https://stackoverflow.com/questions/29432749
复制相似问题