[XML] Standardwert für Attribut mit XPath?

engelmarkus

Erfahrenes Mitglied
Guten Abend!
Ich hab hier ein XML-Schema, in dem ich für die Attribute Standardwerte angegeben habe:
XML:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
     <xs:element name="Daten">
          <xs:complexType>
               <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="Test">
                         <xs:complexType>
                              <xs:attribute name="Att1" type="xs:string" default="1" />
                              <xs:attribute name="Att2" type="xs:string" default="1" />
                         </xs:complexType>
                    </xs:element>
               </xs:sequence>
          </xs:complexType>
     </xs:element>
</xs:schema>

Dazu ein passendes XML-Dokument:
XML:
<?xml version="1.0" encoding="utf-8"?>
<Daten xmlns="daten.xsd">
     <Test Att1="1"/>
     <Test Att1="2" Att2="3"/>
     <Test Att2="4"/>
</Daten>

Und hier jetzt mein Code, in dem die Attribut-Werte ausgegeben werden sollen:
Code:
Imports System.Xml

Module Module1
     Sub Main()
          Dim datei As New XmlDocument()
          datei.Load("daten.xml")

          Dim xnm As New XmlNamespaceManager(datei.NameTable)
          xnm.AddNamespace("x", "daten.xsd")

          For Each n As XmlNode In datei.SelectNodes("/x:Daten/x:Test", xnm)
               Console.WriteLine(n.Attributes("Att1").Value)
               Console.WriteLine(n.Attributes("Att2").Value)
          Next

          Console.ReadKey()
     End Sub
End Module

Nur dummerweise gibts jetzt NullReferenceExceptions, wenn eines der Attribute nicht in der XML-Datei vorhanden ist. Wie bring ich ihn jetzt dazu, dass er, wie im Schema angegeben, Default-Werte einsetzt? Oder hab ich irgendwo einen Denkfehler drin? :confused:
 
Zuletzt bearbeitet von einem Moderator:
Das sollte ja schon beim Schreiben der Xml-Datei geschehen. Wie füllst du die Datei denn?

Was du auch probieren kannst:
Generier die mit dem Xsd Compilier aus dem Schema eine Klasse und deserialisier das Xml in eine Objektstruktur. Ggf setzt der Serializer die Default-Werte anhand des Schemas
 
Hey, danke! Diesen XSD-Compiler hab ich noch gar nicht entdeckt gehabt :-( . Die Klasse, die der erzeugt, setzt die Default-Werte ein, also jetzt gehts.
Ist der eigentlich schon irgendwo in Visual Studio eingebunden, oder muss man das selber machen?
 
Zurück