Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

элемент Xml с Xsi:nil="true"

23K
08 декабря 2006 года
voladu
4 / / 08.12.2006
Здравствуйте!

Работаю в VS2003 — VB.Net.
Столкнулся с такой проблемой: При сериализации класса не могу присвоить в элементе XML документа
одному атрибуту значение null , а другому некоторое значение.
Сериализуемый класс
Код:
' кусок класса который сериализуется
Public Class DBody
' .....................
     <System.Xml.Serialization.XmlElementAttribute("IndTaxNum", _
                  Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, _
                  IsNullable:=True)> _
            Public IndTaxNum() As IndTaxNumColumn
'.....................
End Class

' объявление типа
Public Class IndTaxNumColumn
        <System.Xml.Serialization.XmlAttributeAttribute()> _
        Public ROWNUM As Integer

        <System.Xml.Serialization.XmlTextAttribute()> _
        Public Value As String    
    End Class

в документ передается массив объектов IndTaxNumColumn, при этом не все значения Value заполняются.
 
Код:
<IndTaxNum ROWNUM="1" xsi:nil="true" />
    <IndTaxNum ROWNUM="2">345453<IndTaxNum/>
    <IndTaxNum ROWNUM="3" xsi:nil="true" />
    <IndTaxNum ROWNUM="4">767567<IndTaxNum/>
.................

Однако, если задавать

 
Код:
Value = System.DBNull.Value.ToString


создается —
 
Код:
<IndTaxNum ROWNUM="1" />

если не передавать значение IndTaxNumColumn в массив, то
 
Код:
<IndTaxNum xsi:nil="true" />

Ни тот, ни другой вариант не подходят.
Как можно присвоить null переменной Value, и оставить значение ROWNUM? и Добится такого результата
 
Код:
<IndTaxNum ROWNUM="1" xsi:nil="true" />


Заранее спасибо!
273
09 декабря 2006 года
3A3-968M
1.2K / / 22.12.2005
А как ты представляешь себе запись null в значение атрибута??
Вот так что-ли: Value="null". Хорошо, но тогда XML-парсер как поймёт что ты имел в виду, строку "null" или значение null. Рекомендую вместо null в в Value писать String.Empty. Атрибуты, значения которых равны null не выводятся в XML.
23K
11 декабря 2006 года
voladu
4 / / 08.12.2006
Цитата: 3A3-968M
А как ты представляешь себе запись null в значение атрибута??
Вот так что-ли: Value="null". Хорошо, но тогда XML-парсер как поймёт что ты имел в виду, строку "null" или значение null. Рекомендую вместо null в в Value писать String.Empty. Атрибуты, значения которых равны null не выводятся в XML.


Попробовал 4 варианта :

  • System.DBNull.Value.ToString
  • Nothing
  • String.Empty
    результат:
     
    Код:
    <IndTaxNum ROWNUM="1" />
  • не передавать значение
    результат:
     
    Код:
    <IndTaxNum xsi:nil="true" />

А нужно вот так:
 
Код:
<IndTaxNum ROWNUM="1" xsi:nil="true" />

иначе проверка по схеме не проходит!
273
11 декабря 2006 года
3A3-968M
1.2K / / 22.12.2005
Почему бы тогда не представлять оба поля класса как XmlAttribute, а то у тебя Value как XmlTextAttribute
23K
11 декабря 2006 года
voladu
4 / / 08.12.2006
C XmlAttribute получается
 
Код:
<IndTaxNum ROWNUM="1" Value="" />
273
13 декабря 2006 года
3A3-968M
1.2K / / 22.12.2005
Цитата: voladu
C XmlAttribute получается
 
Код:
<IndTaxNum ROWNUM="1" Value="" />


Ну и всё правильно, ведь xsi:nil="true" означает, что элемент имеет значение null. Т.е. в твоём случае если xsi:nil установлен, то объект IntTaxNum ссылается на null, а не его атрибут Value.

23K
13 декабря 2006 года
voladu
4 / / 08.12.2006
получается правильно, но
если Value имеет значение, то получается
 
Код:
<IndTaxNum ROWNUM="1" Value="ХХХХ" />

а нужно
 
Код:
<IndTaxNum ROWNUM="1">ХХХХ< /IndTaxNum>


а также, если Value имеет значение Nothing, то получается
 
Код:
<IndTaxNum ROWNUM="1" Value="" /> или <IndTaxNum ROWNUM="1" />

а нужно
 
Код:
<IndTaxNum ROWNUM="1" xsi:nil="true">
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог