문제

내 XML은 다음과 같습니다.

<nodes>
<node name="somekey">
<item name="subject">blah</item>
<item name="body">body</item>
</node>
</nodes>

그리고 지금까지 내 코드는 다음과 같습니다.

XDocument doc = XDocument.Load(HttpContext.Current.Server.MapPath(String.Format("~/files/{0}/text.xml", "en")));

if (doc != null)
{
    XElement element = doc.Elements().Where(e => e.Elements().Any() && e.Attribute("name").Value == "someKey").First();
}

오류가 발생하고 있습니다.

Sequence contains no elements

내 쿼리가 잘못 되었나요?

나는 코드를 밟았고 xlement와의 라인에서 오류가 발생합니다 ..

도움이 되었습니까?

해결책

당신은 다음과 같은 것을 원합니다 :

var element = doc.Descendants("node").Where(x => x.Attribute("name") != null && x.Attribute("name").Value == "somekey").FirstOrDefault();

편집하다: 결과에서 첫 번째 요소를 잡기 위해 편집;

다른 팁

당신은 또한 사용할 수 있습니다 :

var element = doc.Elements()
                 .Elements()
                 .Where(e => (e.Elements().Any() 
                              && e.Attribute("name").Value == "somekey"))
                 .First();

설명:

그만큼 doc.Elements() 루트 요소를 잡습니다 nodes. 그럼 .Elements() 그 자식 요소를 선택합니다. node. 그만큼 .Where() 그런 다음 해당 노드 세트에서 수행됩니다. Lambda는 자식 요소가있는 요소를 선택하고 "Nodey"값이있는 속성 "이름"을 갖습니다.

원래 코드는 자녀 요소를 얻지 못했습니다. 따라서 원래 결과 세트가 비어있었습니다.

당신은 또한 이것을 할 수 있습니다 .Descendants() 그러나 그것은 나에게 약간 조잡하고 느슨하다고 느낍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top