首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XmlSchemaSet的XSD验证没有发现错误

使用XmlSchemaSet的XSD验证没有发现错误
EN

Stack Overflow用户
提问于 2015-04-03 13:04:53
回答 2查看 1.4K关注 0票数 1

我有一个简单的XML,我们生成一个与供应商的XSD相匹配的XML,但是,在使用<deletePLU>而不是<domain:deletePLU>的文档中有一个错误。

XSD使用目标命名空间:

代码语言:javascript
复制
<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命名空间。

代码语言:javascript
复制
<?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,但都没有工作)

代码语言:javascript
复制
        // 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 )
        {...}

如何确保文档的错误被发现?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-06 10:37:34

由于我不确定如何更详细地解释这个问题,所以我发现如何使这个XSD验证像预期的那样工作。

使用读取器设置如下:

代码语言:javascript
复制
        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)

代码语言:javascript
复制
schemas.Add( null, "c:\test\mySchema.xsd" );

我希望这对其他人有帮助。

票数 1
EN

Stack Overflow用户

发布于 2015-04-03 15:07:24

来自, table with XmlReaderSettings (重点雷):

ValidationEventHandler事件 用于接收有关验证事件的信息的事件处理程序。如果没有提供事件处理程序,则在第一个验证错误时抛出一个XmlException。

由于您指定了一个ValidationEventHandler,所以XmlReader调用处理程序,但不会抛出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29432749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档