지금 답변으로 전송 중입니다. 당신이 더 자손을 얻을 것이다 가능성이 높다 잘못된 인수 Descendants(XName)
를 호출 할 경우
은 자손에 대한 두 가지 방법() http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement.descendants.aspx
Public method Descendants()
Returns a collection of the descendant elements for this document or element,
in document order. (Inherited from XContainer.)
Public method Descendants(XName)
Returns a filtered collection of the descendant elements for this
document or element, in document order. Only elements that have a
matching XName are included in the collection. (Inherited from XContainer.)
을 수 있습니다. Descendants()
[sic]을 사용하면 모든 자손을 얻을 것으로 기대됩니다.
FirstNode
이 비어 있지 않은 대답을주는 이유는 인수로 동작을 변경할 수 없다는 것입니다. 따라서 은을 올바르게 호출하는 것을 피할 수 없습니다.
하십시오 는 실제 코드
UPDATE 게시 할 수 있습니다. 이 토론은 문제를 해결하는 가장 효과적인 방법은 아닙니다. SSCCE (https://meta.stackexchange.com/questions/22754/sscce-how-to-provide-examples-for-programming-questions) "단락, 자체 포함, 수정 (컴파일 가능), 예를 구성해야합니다."
SMALL 예제를 만드는 것입니다. KML 파일을 가져 와서 읽을 수 있고 실패한 것으로 보이는 방법을 명시 적으로 표시 할 수있는 최소한의 유효한 하위 집합을 만듭니다. 그것은 문제가 KML이라고 생각하지 않을 것입니다 - 나는 당신이 메서드를 호출하는 방법과 당신이 기대하는 바를 생각합니다.) 나는 XML 문자열을 읽으려고 노력할 것이고 그래서 여러분은 코드를 게시 할 수 있습니다. "empty"와 같은 단어는 정확하지 않습니다 - IEnumeration이 일부 함수에 의해보고 된 요소가 0임을 의미합니까? (XDocument 지식은 몇 년 전입니다)
If 당신을 도울 수있는 SSCCE를 만드십시오. (나는 잘 모릅니다.) 그러나 적어도 우리는 당신을 표현할 수 있습니다. 문제를 정확하게 말하십시오. 당신은 내가 잘못되고있는 것이 무엇인지에 대한 추측을하여야한다 코드 게시하지 않은 이후 :
UPDATE 실제로) 네 자손() 및 요소 (않는 노드를 포함하지만 당신은 제대로 심문되지 않습니다. 코드를 게시 한 경우 훨씬 적은 시간을 들여 답을 얻을 수 있습니다.
업데이트 디버거 스냅 샷을 보내 주셔서 감사합니다. 나는 이것이 문제가 처음에 드러난 곳이라고 추측했다. 첫째, 정확한 용어를 사용해야합니다. 즉, "비어 있음"을 썼지 만 디버거는이를 "null"로 표시합니다. 그들은 완전히 다르며 다른 하나를 사용하면 오도됩니다.
내 생각에 당신이 디버거를 사용하여 하위 요소를 나타낼 수 없다는 의심이 들었습니다. 나는 당신과 당신의 디버거가 서로를 이해하지 못한다고 생각합니다. 이것은 그물을 통해 디버깅하는 것은 불가능합니다.
자손()를 IEnumerable입니다 :
public IEnumerable<XElement> Descendants()
내 C#을/Linq에 녹슨 내가이 작업 시스템을 가지고 있지 않지만 일반적인 용어로이 그것을 위해 요소를 얻는 방법을 제공하는 것을 의미한다. 당신은 CODE (안 디버거)의 후손을 얻는 방법 일을해야 할 것
하는 GetEnumerator() (http://msdn.microsoft.com/en-us/library/s793z9y2.aspx)
그래서 당신은 IEnumerable을 통해 반복하는 방법을 배울 필요가있다 : 그것의 유일한 방법은 . 메모리에서이 같은 것입니다 :
foreach (XElement descendant : getDescendants()) {
printSomehowOrDoSomething(descendant);
}
당신은 당신이 중 하나를 당신이 원하는 것을 할 것이다 또는 당신이 당신의 문제가 훨씬 명확하게 생각을해야합니다 다음, 사용하고 실행하고자하는 실제 코드를 작성하는 경우 당신을 통신 할 수 있습니다. (왜 당신의 디버거가 "null"이라고 쓰는지 모르겠다. 기술적으로는 올바르지 만 오도 된 것일 수도있다.) 화면 캡 (+ 버튼)은 열거 형에 자식이 있음을 암시한다 ..
간단히 : 디버거를 잊어 버린다. 을 실행하려는 코드를 첫 번째 인스턴스에서 가능한 한 간단하게 작성하십시오 (10 줄 이하). 작은 조각 (SSCCE)의 값은 다른 사람들이 즉시 재현 할 수 있다는 것입니다. 잘라 내기 및 붙여 넣기가 가능합니다 자신의 시스템에서 실행하십시오. 코드와 오류는 디버거보다 훨씬 정확합니다 .BTW Unit Testing 및 Test-Driven 개발을 사용하기를 바랍니다. 실패한 테스트를 작성한 경우 문제가 발생한 위치가 분명합니다.
중요한지 확실하지 않지만 DocumentType이 null 인 경우 XDocument뿐입니다. – SelAromDotNet
xDoc.FirstNode가 doc ...에있는 첫 번째 노드의 XNode를 반환하지만 xDoc.Nodes()도 비어 있습니다. – SelAromDotNet
'((XElement) xDoc.FirstNode'에는 균형 잡힌 대괄호가 없습니다.최소한의 실패 사례를 위해 코드를 게시하고 값을 표시하는 것이 유용 할 수 있습니다 (예 : 인쇄물을 통해). 그것은 당신이 잘못 요소를 캐스팅하는 것일 수 있습니다 –