2011-12-15 89 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在默認屬性工作之前驗證。