2011-12-15 53 views
2

我用下面的代码读取一些XML用的XmlReader:XMLReader不能读取默认属性

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.ValidationType = ValidationType.Schema; 
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings; 
settings.Schemas.Add(xmlSchemaSet); 

using (var reader = XmlReader.Create(new StringReader(formatXml), settings)) 
{ 
    while (reader.Read()) 
    { 
     ... 
    } 
} 

对于每个元素,我看了所有的属性是这样的:

while (reader.MoveToNextAttribute()) 
{ 
    ... 
} 

但是,此代码不会选取具有在XSD架构中指定默认值的属性,如下所示:

<xs:attribute name="new" type="xs:string" default="error" /> 

它只会提取在XML中显式设置的属性。我怎样才能让它自动从XSD获取默认值?

+0

检查了这一点,它解释了为什么这些属性不是DTD架构的一部分:http://msdn.microsoft.com/en-us/magazine/cc302158.aspx – MethodMan 2011-12-15 22:09:03

回答

2

原来一切正常,它的默认属性被读取。然而,我忽略了一些验证错误,导致属性没有设置。

所以答案是:确保您的XML在默认属性工作之前验证。