Этот метод действительно неполной и заслуживает некоторого объяснения для новичка C# и LINQ к XML:
var types = XDocument.Load("http://simon.ist.rit.edu:8080/Services/resources/ESD/OrgTypes/")
.Descendants("type")
.Select(t => (string)t) // under the hood magic
.ToList();
Использование (string)
бросить это немного волшебный и не получает те же результаты, если использовались ToString()
. Я объясню ... Я изменил XML только немного:
<type attrib="bar" attrib2="boo" >Resource
<foo a="1" a.2="A"/>
</type>
// note, I also removed the value of type immediately following Resource node
(string)
бросок на t
действует на t.Value
под капотом. Без броска, результат:
<type>Physician</type>
<type>Ambulance</type>
<type>Fire Department</type>
<type>Helicopter/Air Transport</type>
<type>Home Care Agency</type>
<type>Hospital</type>
<type>Law Enforcement Agency</type>
<type>Nursing Home</type>
<type attrib="bar" attrib2="boo">Resource
<foo a="1" a.2="A" /></type>
<type></type>
<type>Other</type>
<type>Hospice</type>
<type>School</type>
<type>Emergency Shelter</type>
Использование (string)t
:
Physician
Ambulance
Fire Department
Helicopter/Air Transport
Home Care Agency
Hospital
Law Enforcement Agency
Nursing Home
Resource
Other
Hospice
School
Emergency Shelter
И t.Value
:
Physician
Ambulance
Fire Department
Helicopter/Air Transport
Home Care Agency
Hospital
Law Enforcement Agency
Nursing Home
Resource
Other
Hospice
School
Emergency Shelter
И, наконец, чтобы показать, что t.ToString()
отличается (string)t
:
<type>Physician</type>
<type>Ambulance</type>
<type>Fire Department</type>
<type>Helicopter/Air Transport</type>
<type>Home Care Agency</type>
<type>Hospital</type>
<type>Law Enforcement Agency</type>
<type>Nursing Home</type>
<type attrib="bar" attrib2="boo">Resource
<foo a="1" a.2="A" /></type>
<type></type>
<type>Other</type>
<type>Hospice</type>
<type>School</type>
<type>Emergency Shelter</type>
Все это повторяет некоторые малоизвестные проблемы с LINQ-to-XML.
Моя рекомендация для ясности и простоты технического обслуживания будет выглядеть следующим образом:
var types = XDocument.Load("http://simon.ist.rit.edu:8080/Services/resources/ESD/OrgTypes/")
.Descendants("type")
.Select(t => t.Value) // be explicit about what you want
.ToList();
Вы можете найти любой element или descendant из IEnumerable
вкуса.
Вы еще что-нибудь пробовали? – czuroski
Покажите, что вы уже пробовали, есть много про разбор XML в C#. –
Я бы обманул, создаю объект System.Data.DataTable в памяти, использую функцию DataTable.ReadXML и использую его в удобной DataTable для работы. Но это взломать, и меня, наверное, застрелили бы, если бы я поставил это как реальный ответ. – David