2012-11-02 2 views
0

가능한 중복 :LINQ는 예상대로 작동하지 않습니다

http://msdn.microsoft.com/en-us/library/bb387061.aspx

: 나는 마이크로 소프트의 예에서 찾아 봤는데

Understanding Linq To Xml - Descendants return no results 이렇게

여기에 있습니다.

IEnumerable<string> partNos = 
from item in purchaseOrder.Descendants("Item") 
select (string) item.Attribute("PartNumber"); 

실제로 "3 층"인 purchaseOrder의 항목을 처리하기 위해 "자손"을 사용합니다.

XML을 사용하여 동일한 작업을 수행하려고하면 아무 것도 얻을 수 없습니다.

내 XML : 내 코드

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<name>Roulette</name> 

<modules> 
    <module>application</module> 
    <module>test</module> 
</modules> 
:. 정확히 어디 불행하게도

XDocument mainPOM = XDocument.Load(above_xml); 
List<string> pomLocations = (from loc in mainPOM.Descendants("module") select (string)loc.Name.LocalName).ToList(); 
Console.WriteLine(pomLocations.Count); 

이 pomLocations 0 :(의 길이가

은 누군가가 말해 주시겠습니까 내가 엉망 이냐?

답변

1

루트 요소는이 포함되어 있습니다 자손 요소 자체에 대한 기본 네임 스페이스를 설정하는 것

xmlns="http://maven.apache.org/POM/4.0.0" 

. 따라서 요소의 이름은 "프로젝트"가 아닙니다.이 이름 공간 내의 "프로젝트"입니다. 당신이 원하는 : 나는대로 Select 절을 떠 났어요

XNamespace ns = "http://maven.apache.org/POM/4.0.0"; 
var locations = mainPOM.Descendants(ns + "project") 
         .Select(...); 

"..."내가 생각하지 않는 한 당신은 정말 항상 쿼리의 미덕 "프로젝트"가 될 것입니다 loc.Name.LocalName을합니다.

또한 실제로는 Descendants을 원한다는 것이 명확하지 않습니다. project이 루트 요소 인 경우 mainPOM.Root을 사용하지 않으시겠습니까?

+0

안녕하세요, 답변 해 주셔서 감사합니다. :). 사실, 노드 내부를 선택하고 싶습니다. 그러나 그것은 임시 코드였습니다. 단지 * something *을 선택하는 것이 었습니다. 그리고 BTW, 어쨌든 작동하지 않습니다. 방금 기존 코드에 ns를 추가했으며 길이는 여전히 0입니다. 아이디어? 자손에 관해서. 실제로 "모듈"노드를 찾고 있기 때문에 필요합니다. 다시 말하지만, 그것은 단지 테스트 코드 일뿐입니다. 나는 그것을 편집 할 것이다. – Axonn

+0

자, 이제 작동합니다. 나는 "프로젝트"를 "모듈"로 바꿨다. ns + "project"가 0 개 항목을 반환합니다. ns + "모듈"이 예상대로 돌아 왔습니다. 2. 감사합니다. – Axonn

+0

@Axonn : 'mainPOM'이란 무엇입니까? 이미'project' 요소라면, 그것을 설명 할 것입니다. 이것은 프로그램을 돕는 짧지 만 완전한 * 프로그램을 제공하는 곳입니다. 기본적으로 우리는 추측 해 둡니다. –

관련 문제