webForumDet fria alternativet
Logga in / Bli medlem

XmlDocument och XSD-default attribut

.NET

5 svar · 311 visningar · startad av bedlam

Medlem sedan juni 200421 inlägg
Frågan#1

Hejsan allihopa, har lite problem med XML och .net här...
säg att jag har en xmlfil med en massa <book> i

<book>
    <title />
    <author />
</book>

Jag vill att varje barn-nod till book ska få ett default värde utifrån ett XSD-schema. Det borde bli nått sånt här för varje nodtyp:

              
             <xs:element name="title">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string">
                      <xs:attribute name="readorder" default="1" />
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>

När jag laddar in datan via XmlDocument eller XmlReader återfinns inget readorder attribut. oavsett om jag validerar dokumentet eller inte.
förslag?,Har jag missuppfattat något eller är detta helt enkelt utanför XmlDocuments möjligheter?

Tack på förhand!
/Simon

Medlem sedan dec. 19996 721 inlägg
#2

Värdet borde läsas in rätt om du använder XmlValidatingReader, däremot kommer det inte ut rätt, eftersom dokumentet kommer ihåg att värdet bara var ett defaultvärde.

Du kan lösa det genom att subklassa XmlValidatingReader.

public class XmlValidatingReaderNShit : XmlValidatingReader
{
    public XmlValidatingReaderNShit (XmlReader reader) : base(reader) { }
    public override bool IsDefault { get { return false; } } 
}
Medlem sedan juni 200421 inlägg
#3

Tack så mycket emission, men XmlValidatingReader är ju deprecated....
ajja, får väll använda den ändå då :)

tillägg: fungerade ypperligt!, ska kolla om XmlReadern har motsvarande möjligheter, bättre att subclassa den isåfall.

tillägg2: råkade såklart glömma att jag arbetade i .Net Compact Framework, satt och testade i en consolapplikation för snabbhetens skull, och upptäckte sedan när jag bestämt mig för xmlvalidatingreader att den inte finns med i compact framework... fuuudge :(

Jag måste alltså fixa detta med XmlReadern på något sätt..

/Simon

Medlem sedan dec. 19996 721 inlägg
#4

Ha, se där, jag har visst inte använt XmlValidatingReader på länge. Hade ingen aning om att den var utmobbad. Jag ska se om jag kan hitta på någon lösning.

Medlem sedan juni 200421 inlägg
#5

Tack för att du hjälper till. känns som att jag har stångat huvudet blodigt mot den här xmlväggen :)

Medlem sedan juni 200421 inlägg
#6

Löste det hela genom att ärva från XmlReader, implementera alla metoder som krävdes.
Vidarebefordrar bara metodanropen till den XmlReader jag tar som parameter i konstruktorn. och så gör jag precis som du gjorde med ValidatingXmlReader med den kritiska IsDefault, dvs returnerar alltid false.

sedan kan jag bara köra en
XmlDocument doc = new XmlDocument(minNyaReader);

ex:

        public override bool IsEmptyElement
        {
            get { return _Reader.IsEmptyElement; }
        }

        public override bool IsDefault
        {
            get {
                return false;
            }
        }
253 ms totalt · 4 externa anrop · v20260731065814-full.14655e19
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)