【发布时间】:2015-06-08 13:50:28
【问题描述】:
我有一个简单的 XML,我们生成以匹配供应商的 XSD,但是,文档中存在错误,我们使用 <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”归因于没有架构的默认命名空间?
<?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 )
{...}
如何确保发现文档的错误?
谢谢!
【问题讨论】:
-
向我们展示 XSD,也许它实际上允许 deletePLU 没有命名空间?
-
XSD 是巨大的。但不,它不允许这样做,因为当使用相同的 XSD 将 XML 加载到 XML Studio 2014 中进行验证时,Xml Studio 确实按预期输出错误——“deletePLU”缺少“域”命名空间。
-
@nodots 你是对的。该标签可以在没有命名空间的情况下使用。我编辑了我的问题以包含 XSD 根目录。但问题仍然存在,为什么验证没有发现错误?
-
我很困惑 - 它可以在没有命名空间的情况下使用,还是错误?您能否显示 XSD 中的
定义?是否在同一个 XSD 中?
标签: c# xml xsd xsd-validation