2013-01-31 3 views
0

LINQ를 사용하여 특정 특성 값이있는 특정 요소를 찾고 다른 특성 값을 반환하려고합니다. 찾고있는 요소의 이름을 고유 한 것으로 변경하고 올바른 값을 반환하는 방식으로 검색하면됩니다. XML 형식을 제어 할 수 없어서 불행히도이 작업을 수행 할 수 없습니다. 그래서 LINQ가 각 요소 "행"을 통과하고 내가 찾고있는 특성을 반환하게하는 방법.동일한 이름의 요소를 반복하고 다른 특성 값을 사용하여 특성을 반환하십시오.

편집 :

<currentTime>2013-01-31 12:34:49</currentTime> 
    <result> 
    <rowset name="kills" key="killID" columns="killID,solarSystemID,killTime,moonID"> 
    <row killID="28024540" solarSystemID="30000967" killTime="2013-01-25 21:41:00" moonID="0"> 
    <victim characterID="888493667" characterName="Syrsyrian" corporationID="98152004" corporationName="Eviscerate." allianceID="0" allianceName="" factionID="0" factionName="" damageTaken="20220" shipTypeID="4306" /> 
    <rowset name="attackers" columns="characterID,characterName,corporationID,corporationName,allianceID,allianceName,factionID,factionName,securityStatus,damageDone,finalBlow,weaponTypeID,shipTypeID"> 
     <row characterID="1062593035" characterName="cal dasiri" corporationID="310281086" corporationName="Un4seen Development" allianceID="1566707582" allianceName="Republic Alliance" factionID="0" factionName="" securityStatus="5.00586641950613" damageDone="2286" finalBlow="1" weaponTypeID="2629" shipTypeID="24698" /> 
     <row characterID="0" characterName="" corporationID="98074388" corporationName="The New Lunar Republic" allianceID="0" allianceName="" factionID="0" factionName="" securityStatus="0" damageDone="9620" finalBlow="0" weaponTypeID="0" shipTypeID="17404" /> 
     <row characterID="584494552" characterName="Diesel24" corporationID="753753190" corporationName="Space-Bar" allianceID="1566707582" allianceName="Republic Alliance" factionID="0" factionName="" securityStatus="3.5" damageDone="2322" finalBlow="0" weaponTypeID="24702" shipTypeID="24702" /> 
     <row characterID="90905050" characterName="Thomas Shaefer" corporationID="187930037" corporationName="The Partisan Brigade" allianceID="1566707582" allianceName="Republic Alliance" factionID="0" factionName="" securityStatus="4.1" damageDone="1940" finalBlow="0" weaponTypeID="27315" shipTypeID="16227" /> 
     <row characterID="624484955" characterName="Full Penetration" corporationID="187930037" corporationName="The Partisan Brigade" allianceID="1566707582" allianceName="Republic Alliance" factionID="0" factionName="" securityStatus="3.1" damageDone="1788" finalBlow="0" weaponTypeID="27371" shipTypeID="16227" /> 
     <row characterID="1695597027" characterName="Algazi" corporationID="187930037" corporationName="The Partisan Brigade" allianceID="1566707582" allianceName="Republic Alliance" factionID="0" factionName="" securityStatus="1.5" damageDone="1258" finalBlow="0" weaponTypeID="1818" shipTypeID="24698" /> 
     <row characterID="92087835" characterName="Yasin Stavrouski" corporationID="310281086" corporationName="Un4seen Development" allianceID="1566707582" allianceName="Republic Alliance" factionID="0" factionName="" securityStatus="0.4" damageDone="561" finalBlow="0" weaponTypeID="8819" shipTypeID="587" /> 
     <row characterID="581357145" characterName="Nykitah" corporationID="187930037" corporationName="The Partisan Brigade" allianceID="1566707582" allianceName="Republic Alliance" factionID="0" factionName="" securityStatus="5" damageDone="445" finalBlow="0" weaponTypeID="24702" shipTypeID="24702" /> 
     <row characterID="92692957" characterName="Mokey PYD" corporationID="98153124" corporationName="Plots Your Demise" allianceID="0" allianceName="" factionID="0" factionName="" securityStatus="0" damageDone="0" finalBlow="0" weaponTypeID="5399" shipTypeID="594" /> 
     <row characterID="90511370" characterName="Rae'll" corporationID="187930037" corporationName="The Partisan Brigade" allianceID="1566707582" allianceName="Republic Alliance" factionID="0" factionName="" securityStatus="-0.4" damageDone="0" finalBlow="0" weaponTypeID="527" shipTypeID="670" /> 
    </rowset> 
    <rowset name="items" columns="typeID,flag,qtyDropped,qtyDestroyed,singleton"> 
     <row typeID="3090" flag="31" qtyDropped="0" qtyDestroyed="1" singleton="0" /> 
     <row typeID="31564" flag="94" qtyDropped="0" qtyDestroyed="1" singleton="0" /> 

그리고 쿼리 :

XAttribute two = (from kd1 in loadkillData1.Elements("row") 
        where (string)kd1.Attribute("characterName") == "cal dasiri" 
        select kd1.Attribute("allianceName")).FirstOrDefault(); 

string derp2 = two.Value; 
label10.Content = derp2; 
+3

향후 질문을 작성할 때 서식을 지정할 때 더주의하십시오. 가독성 측면에서 큰 차이가 있습니다. –

+0

그래서 현재의 접근 방식으로는 올바르게 작동하지 않습니다. – JLRishe

+0

당신은 내부의 'row'엘리먼트를 열거하고 있습니까? – paul

답변

1

xd.Descendants()를 사용 row의 모든 인스턴스를 얻을 수있는 오류가 Null 참조

는 XML (샘플)입니다

XAttribute two = (from kd1 in xd.Descendants("row") 
        where (string)kd1.Attribute("characterName") == "cal dasiri" 
        select kd1.Attribute("allianceName")).FirstOrDefault(); 
+0

LINQ 쿼리에서 대/소문자 변환을 수행 할 필요가 없습니다. kd1.Attribute ("characterName")를 사용하면됩니다 .XAttribute의 표준 get 속성이며이 값을 처리하는 기본 방법입니다. – Magnum

+0

@Magnum'kd1.Attribute ("characterName") .Value'는'characterName' 애트리뷰트가없는'row's에 대해'NullReferenceException'을 생성합니다 (예제 XML에는 이러한 행이 여러 개 있습니다). 문자열 캐스트에이 문제가 없습니다. – JLRishe