webForumDet fria alternativet

XmlDocument och XSD-default attribut

5 svar · 310 visningar · startad av bedlam

bedlamMedlem sedan juni 200421 inlägg
#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

emissionMedlem 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; } } 
}
bedlamMedlem 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

emissionMedlem 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.

bedlamMedlem 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 :)

bedlamMedlem 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;
            }
        }
139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)