2014-12-19 4 views
0

내가 윈도우 폰 8의 C#에서 일하고 있어요/XAML .NET 4.5 응용 프로그램LINQ2XML 자손은 Windows Phone 8에서 작동합니까?

내가 얻고있는 XML에서 지정된 이름으로 선택 요소에 노력하고,하지만 난 때 Descendants을 사용하고 있습니다 그것을 선택하기 위해 빈 콜렉션 /리스트/결과 배열을 리턴한다.

이름을 선택하지 않으면 정상적으로 돌아 오지만 이름을 검색하려고하면 빈 값이 반환됩니다.

나는 아마도 바보이며 어리석은 실수를 저지르고있을 것입니다. 당신은/당신이 설명 할 수 있습니까?

예 :

myXMLString :

<root> 
    <element> 
    <thisOne xmlns="something">example</thisOne> 
    <element> 
    <others></others> 
</root> 

코드 : 당신은 현재에없는 thisOne라는 요소를 찾고

XDocument xmlData = XDocument.Parse(myXMLString); 
//is always null 
var thisOne = xmlData.Root.Descendants("thisOne").FirstOrDefault(); 
//returns the flattened version of the tree in a list 
var descendants = xmlData.Root.Descedants().ToList(); 
+0

선택하려는 요소 (''의 xmlns = "뭔가"가 있다는 사실과이에 포함 할만큼 놀라운 것을 귀하의 질문) 큰 깜박이 표시기에 대한 평범한 것이 있었는지에 대해 간단하고 Windows Phone 8에서'Descendants()'가 자동으로 실패하지 않았 음을 알고 있어야합니다. – JLRishe

+0

그 이유를 알고 있습니다. 질문. 당신이 전체 질문을 읽으면, 결국 내가 뭔가 잘못하고 있다고 말하고 있습니다 :) – mishan

+0

네가 그렇게 말한 것은 사실이다. :) 조금 snippy되는 것에 대해 유감스럽게 생각해 라. – JLRishe

답변

1

네임 스페이스. something 네임 스페이스를 지정해야합니다 ... xmlns="something" 부분은이 요소와 추가 자손에 대한 기본 네임 스페이스를 지정합니다. 다행히, XML에 LINQ는 정말 쉽게 XML 네임 스페이스를 사용할 수 있습니다 :

XNamespace ns = "something"; 
var thisOne = xmlData.Root.Descendants(ns + "thisOne").FirstOrDefault(); 
+0

빠른 답변을 보내 주셔서 감사합니다. 사전에 네임 스페이스를 알지 못하고이 요소를 선택하는 방법이 있습니까? (SOAP 응답이 잘못 작성되어 WSDL이 잘못 작성되어 XML 응답이 생겨서 프로젝트에 webservice로 추가 할 수 없습니다 :))? – mishan

+2

@mishan SOAP 웹 서비스가 하나의 호출에서 다음 호출로 네임 스페이스에 다른 _prefixes_를 사용하더라도 _URIs_ 네임 스페이스 (이 예에서 '무언가'부분)가 실제로 변경되지는 않을 것입니다. URI가 일관성이있는 한 위의 접근 방식이 작동해야합니다. – JLRishe

+1

@mishan : JLRishe가 말한 것과 동의합니다.하지만 로컬 이름 만 사용하고 싶다면'xmlData.Root.Descendants(). FirstOrDefault (x => x.LocalName == "thisOne")'. 그래도 네임 스페이스를 사용하는 것이 좋습니다. –