2014-09-03 3 views
1

У меня есть следующий документ XML:Анализировать XML к нескольким классам

<?xml version="1.0" encoding="UTF-8"?> 
<Resp> 
    <dData> 
    <Desc></Desc> 
    <dId></dId> 
    <Num></Num> 
    <Ref></Ref> 
    <Ms></Ms> 
    <Im></Im> 
    </dData> 
    <Type></Type> 
    <RespData> 
    <dc></dc> 
    <sString></sString> 
    </RespData> 
</Resp> 

И следующие классы:

Public Class dData 
    Public Property Desc As String  
    Public Property DID As String 
    Public Property Num As Integer  
    Public Property Ref As String  
    Public Property Ms As String   
    Public Property Im As String   
End Class 

Public Class RespData 
    Public Property DC As Integer   
    Public Property sString As String 
End Class 

И, наконец, комбинация выше:

Public Class Resp 
    Public Property URData As dData 
    Public Property Type As String 
    Public Property URRespData As RespData 
End Class 

I хотите проанализировать XML выше в классе Resp.

Я сохранил файл XML в XMLDocument называется XmlInput и я написал:

Dim handleXML = From h In xmlInput.Elements("Resp") 

Затем handleXML.Count вернулся 1

Я ожидал HandleXML.Count вернуть 3 (dData, тип, RespData)

, а затем я петлю в узлах каждого элемента и сохраняю значения в классе, к которому он принадлежит. Но он вернулся 1.

Я делаю что-то неправильно? Есть ли лучший способ?

Любая помощь будет оценена по достоинству.

+0

Вы должны реализовать интерфейс [IXmlSerializable] (http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable (v = vs.110) .aspx), а затем использовать кнопку [ XmlSerializer] (http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer (v = vs.110) .aspx) для сериализации/десериализации. –

ответ

0

Я ожидал HandleXML.Count вернуться 3 (dData, тип, RespData)

No. 1 является правильным выход, потому что ваш XML содержит только один элемент <Resp>. Чтобы получить chldren из <Resp> вы должны прошли еще один уровень вниз по дереву:

Dim handleXML = From h In xmlInput.Elements("Resp").Elements() 
'here handleXML.Count is 3' 

Вы также можете рассмотреть другой маршрут, смотрите в XML сериализации/десериализации: MSDN: System.Xml.Serialization.XmlSerializer.

Смежные вопросы