2009-12-21 2 views
0

У меня есть этот XMLкак получить внутреннее большинство Чайлдса, используя XLINQ

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" manifestId="{b91dc6f6-a837-4c5a-bdc8-77a93107af77}" mandatory="No" xmlns="urn:schemas-microsoft-com:PAG:updater-application-block:v2:manifest"> 
<files base="http:abc/def" hashComparison="Yes" hashProvider="SHA1Managed"> 
<file source="123.dll" hash="oZlt8qISQxTNETMTSAfhdzJisj+kgir7oWS64+VMbRRCOXXE" /> 
<file source="234.dll" hash="39UEf/AIp+pSfH4WbftTPVysryCDJBJd/URmUbANpTiAmGHm" /> 
<file source="abc.dll" hash="2X5d8WfRtBuzLKNZ8geVfy3AmOKaUD7cSI17PbRyF8ds66Cx" /> 
</files> 
</manifest> 

Я хочу получать весь узел файл из этого XML, так что я могу получить значение источника, хэш и преходящий для моих дальнейшая работа ..

скажите, пожалуйста, в XLINQ ...

ответ

0

Используйте селектор элементов:

XDocument d = XDocument.Parse(xml); 
XNamespace ns = "urn:schemas-microsoft-com:PAG:updater-application-block:v2:manifest"; 
var files = d.Elements(ns + "manifest").Elements(ns + "files").Elements(ns + "file"); 

Примечание необходимость в XNamespace из-за объявления без префикса xmlns в теге манифеста.

1

Если вы не заботитесь о родительских узлах, вы можете использовать селектор потомков, чтобы упростить код:

XNamespace ns = "urn:schemas-microsoft-com:PAG:updater-application-block:v2:manifest"; 
var files = XDocument.Parse(xml).Descendants(ns + "file").Select(x => new { 
    Source = (string)x.Attribute("source"), 
    Hash = (string)x.Attribute("hash") 
}); 

файлов теперь будет хранить IEnumerable сильно типизированные (анонимных) объектов, которые обнажают Свойство «Источник» и «Хэш»

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