2014-07-09 4 views
1

flow.Name определенно равно «имени» одного из потоков в XDocument FlowData.xdocument.root.element и другие перестановки возвращают null

XElement rootelem = flowData.Root.Element("flows"); 

после указанной линии rootelem содержит элемент потоки, и дети, как ожидалось, но ниже линии выбрасывает пустой ссылкой исключение, почему?

flowData.Root.Element(flow.Name).Remove(); 

flowData объявлен как XDocument и выглядит так:

<?xml version="1.0" encoding="UTF-8"?> 

-<D53ESB>  
    -<comms> 
    <diagnosticemails sender="eventlog"/> 
    </comms> 

-<globalparams>  
    <!-- some comments... --> 
</globalparams> 

-<flows>  
    -<flow webserviceonly="false" stoponerror="true" name="testFlow">  
    -<action name="t1">  
     <schedule firsttime="01/01/2014 14:10:00" every="600000"/>  
    -<adapter name="GetXml"> 
     <param name="url" value="http://xml.betfred.com/Football-Championship.xml"/>  
     </adapter> 
    </action> 
    </flow> 

...more flows 

</flows> 
</D53ESB> 

Эти две строки возвращают нуль тоже:

var xelem2 = flowData.Root.Element(flow.Name); 
var xelem3 = flowData.Root.Element("flows").Element(flow.Name); 

И эти два возвращают пустые наборы:

var keepgoing = new XDocument(rootelem.Descendants(flow.Name)); 
var idk = new XDocument(flowData.Descendants(flow.Name)); 

ответ

2

XElement.Element Метод ожидает имя элемента, а не значение атрибута. Он не знает, какой значение атрибута является имя вашего элемента ....

Вы должны попробовать:

flowData.Root.Element("flows") 
.Elements("flow") 
.Where(f => (string)f.Attribute("name") == flow.Name); 
+0

Оооо! Это работает, спасибо! – Jimmy

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