Пролема с получением атрибута из <?xml ....?>

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

VAngel
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 81
Зарегистрирован: 13.01.2005 (Чт) 0:10
Откуда: 2:5030

Пролема с получением атрибута из <?xml ....?>

Сообщение VAngel » 30.12.2005 (Пт) 11:32

Делаю так:
Код: Выделить всё
   Sub temperi_button(ByVal url as String)
        Dim req As System.Net.WebRequest = System.Net.WebRequest.Create(url)
        Dim res As System.Net.WebResponse = req.GetResponse
        Dim strim As System.IO.Stream = res.GetResponseStream
        Dim RSSdoc As System.Xml.XmlDocument = New System.Xml.XmlDocument()

        Try
            RSSdoc.Load(strim)
        Catch e As TimeoutException
            MsgBox(e.Message)
        Catch es As Xml.XmlException
            MsgBox(es.Message & vbCrLf & "Линия: " & es.LineNumber & vbCrLf & "Позиция: " & es.LinePosition)
            Exit Sub
        End Try

Дальше пытаюсь получить атрибут "encoding" из <?xml version="1.0" encoding="utf-8"?> вот так:
Код: Выделить всё
RSSdoc.FirstChild.Attributes("encoding").Value.ToString

Но получаю ошибку:

NullReferenceException
Object reference not set to an instance of an object.

На
Код: Выделить всё
RSSdoc.FirstChild.Attributes.Count

Получаю тоже самое
Зато, на
Код: Выделить всё
RSSdoc.FirstChild.Name

Получаю: "xml"
Что я делую не так? Модет я вообще в корне не прав :(

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 01.01.2006 (Вс) 17:19

Привет!
С Новым Годом!!! И всего всего.

Я не волшебник, а только учусь. По моему то, что ты пытаешься делать не правильно. Я так понимаю, первая строка в XML документе (<?xml version="1.0" encoding="utf-8"?>) что-то типа комента к нему и указывает на версию XML и кодировка там стандартная. И это не сам XML документ. Все что следует дальше - есть XML документ.

А для чтения данных из XML документа нужно использовать XMLTextReader или XMLNode.

Привиду два примера рабочего кода:

Код: Выделить всё

Private Sub LeesXML()  '// процедура чтения XMLдокумента
        Dim rd As Xml.XmlTextReader = New Xml.XmlTextReader("D:\MyTypeEtiket.xml")
        Dim tel As Int16
        Do While rd.Read
            Select Case rd.NodeType
                Case Xml.XmlNodeType.Element
                    If rd.HasAttributes Then
                        For tel = 0 To rd.AttributeCount - 1
                            rd.MoveToAttribute(tel)
                            myType = rd.Value '// здесь моей переменной присваивается значение считанное из XML документа
                            cboEtiketType.Items.Add(myType) '// а здесь оно записывается в комбобокс на форме
                        Next
                    End If

                Case Xml.XmlNodeType.Text

                Case Xml.XmlNodeType.EndElement

            End Select
        Loop

    End Sub

    '// om gegevens te lezen van bepalde etiket
    Private Sub LeesValueUitXML() '// а в этой процедуре считываются данные для определенного узла xml документа и выводятся в тексбоксы на форме.
        Dim type As String : type = cboEtiketType.SelectedItem.ToString
        Dim oDoc As New Xml.XmlDocument
        Dim XMLZoekNode As Xml.XmlNode
        oDoc.Load("D:\MyTypeEtiket.xml")
        XMLZoekNode = oDoc.SelectSingleNode("Etiketten/typeEtiket[@id='" & type & "']") '// тут типа много разных этикеток и в зависимости от выбранного имени этикетки - переменная Type - из xml документа считываются значения параметров для этой этикетки (кол-во строк, колонок, верхней и левой маржи)
        aantalrijen = XMLZoekNode("aantalrijen").InnerText
        aantalkol = XMLZoekNode("aantalkol").InnerText
        bovenmarge = XMLZoekNode("bovenmarge").InnerText
        linkermarge = XMLZoekNode("linkermarge").InnerText
    End Sub

'// а это xmlдокумент куда пишутся и откуда читаются значения для этикеток

<?xml version="1.0" ?>
- <Etiketten>
  - <typeEtiket id="my">
       <aantalrijen>6</aantalrijen>
       <aantalkol>3</aantalkol>
       <bovenmarge>20</bovenmarge>
       <linkermarge>20</linkermarge>
     </typeEtiket>
   - <typeEtiket id="your">
       <aantalrijen>8</aantalrijen>
       <aantalkol>2</aantalkol>
       <bovenmarge>30</bovenmarge>
       <linkermarge>30</linkermarge>
     </typeEtiket>
  </Etiketten>


А ваще посмотри еще раз MSDN там в принципе нормальные примеры, это я сделал на их основе.
Удачи.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 01.01.2006 (Вс) 18:41

2VAngel:
RSSdoc.FirstChild это к тебя precessor defenition, у него свойство Attributes равно nothing, потому что у него НЕТ атрибутов. Стирока заключенная в <? и ?> воспринимается просто как текст, его ты можешь получить через свойство Text. А потом вручную искать артибут encoding :)
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

VAngel
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 81
Зарегистрирован: 13.01.2005 (Чт) 0:10
Откуда: 2:5030

Сообщение VAngel » 05.01.2006 (Чт) 15:13

Да спасибо, я уже сделал через text, первый предложеный вариан обязательно посмотрю


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

    TopList  
cron