2011-09-26 8 views
1

나는 XML (라고 xdoc)과 같은 파일이 다음하여 XDocument Null 참조 널

<Root> 
<ItemContainer> 
<Item> 
<Item> 
<Item> 
<Item> 
</ItemContainer> 
</Root> 

나는 다음과 같은 경우

XElement xel = xdoc.Element("ItemContainer"); 

지금까지 내가, 내가 이해로 내 ItemContainer 노드 요소에 대한 참조를 가져와야하지만 null이 계속 반환됩니다. 필자 "(문서 순서) 지정 XName이 자식 요소를 제 가져."이

에 대한 MSDN 문서를 판독

제가보기 ItemContainer 첫번째 하위 요소는 지정된 이름으로 나는 무엇을 놓치고 있습니까?

+0

'xdoc'이 'null'이 아닐까요? 'xdoc'이로드되었는지 확인하십시오 ... 어떻게'xdoc'을 채우고 있습니까? – Willem

+0

'XDocument xdoc = XDocument.Load (@ "c : \ projects \ gen \ test_xml.xml");'xdoc에 중단 점을 넣었고 모든 것이 예상대로로드되었습니다. – richzilla

답변

4

는 수행

XElement xel = xdoc.Root.Element("ItemContainer"); 

때문에, <Root>도 처리 할 수있다.

XElement xel = xdoc.Element("Root").Element("ItemContainer"); 

또한 내가 xdoc 유형 XDocument의 가정

1

작동합니다. 문서의 유일한 하위 요소는 루트 노드 <Root>입니다. 이 때문에
, 코드는 다음과 같이한다 :

XElement xel = xdoc.Root.Element("ItemContainer"); 
1

당신이 시도가 ...

xdoc.Root.Element("ItemContainer"); 

루트 요소는 첫 번째 요소

1

다른 사람이 설명했듯이, 유일한입니다 XDocument의 하위 요소가 루트 요소이므로 루트의 하위 항목으로 이동하려면 루트를 통과해야합니다.

XElement xel = xdoc.Root.Element("ItemContainer"); 

또는 XML 선언과 같은 항목에 액세스 할 필요가없는 경우 XElement.Load()을 사용할 수 있습니다. 루트 요소를 직접 반환합니다 :

XElement root = XElement.Load(@"c:\projects\gen\test_xml.xml"); 
XElement xel = root.Element("ItemContainer");