LINQ to XML не возвращает значение по умолчанию - PullRequest
0 голосов
/ 28 февраля 2011

У меня есть значение по умолчанию, указанное в XSD следующим образом:

<xs:complexType name="image">
    <xs:attribute name="path" type="xs:string" />
    <xs:attribute name="type" type="imageType" default="normal" />
</xs:complexType>

Но если я явно не включаю значение в XML, «тип» всегда возвращается в виде пустой строки при выполнении запроса LINQ.например:

Dim images = From i In collection.<image> Select i.@path, i.@type

Следует ли этого ожидать или можно пропустить атрибут и позволить LINQ проверить значение по умолчанию?

1 Ответ

0 голосов
/ 28 февраля 2011

Хорошо, вы сначала проверяете входной XML по своей схеме? Вот пример:

Dim xrs As New XmlReaderSettings()
xrs.Schemas.Add(Nothing, "..\..\XMLSchema1.xsd")
xrs.ValidationType = ValidationType.Schema

Dim doc As XDocument

Using xr As XmlReader = XmlReader.Create("..\..\XMLFile1.xml", xrs)
    doc = XDocument.Load(xr)
End Using

For Each img As XElement In doc.<images>.<image>
    Console.WriteLine("Type: {0}", img.@type)
Next

со схемой

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="images">
    <xs:complexType>
      <xs:sequence maxOccurs="unbounded">
        <xs:element name="image">
          <xs:complexType>
            <xs:attribute name="type" type="xs:string" default="normal"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

и ввод XML

<images>
  <image/>
  <image type="vector"/> 
</images>

этот пример выводит

Type: normal
Type: vector
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...