2009-09-05 10 views
1

URL이있는 xml 파일의 ID를 얻으려고하는 코드가 있습니다. 개체의 인스턴스로 설정되지 않았습니다xml 파일에서 문자열 가져 오기

개체 참조 :

내 코드

public static string GetPageIdByUrl(string url) 
{ 
    string folder = HttpContext.Current.Server.MapPath("/App_Data/Pages/" + Path.DirectorySeparatorChar); 
    foreach (string file in Directory.GetFiles(folder, "*.xml", SearchOption.TopDirectoryOnly)) 
    { 
     var xml = XDocument.Load(file); 

     var q = from f in xml.Descendants("Page") 
       where (string)f.Element("Url").Value == url 
       select (string)f.Attribute("Id").Value; 

     if (q.Count() != 0) 
     { 
      return q.SingleOrDefault(); 
     } 
    } 

    return null; 
} 

나는이 오류가 발생합니다. 줄 : select f.Attribute ("Id"). 값;

"test"가 xml 파일에있는 경우 <Url>test</Url> 속성 ID를 반환하고 싶습니다. 하지만 그 sems는 첫 xml 파일에서만 작동합니다.

희망 사항이 발생합니다.

답변

0

오늘 mabye tirred, 문제는 xml 파일에서 속성이 "Id"가 아닌 "id"로 호출된다는 것입니다.

+0

새 답이 아닌 원래 질문에 "EDIT :"와 같이 넣어야합니다. –

3

몇 가지 샘플 XML을 게시 해보세요.

URL 요소에 "Id"(정확한 철자) 속성이 없다고 생각합니다. 따라서 XNode는 null이며 값을 제공 할 수 없습니다.

1

IdUrl 요소의 속성입니까?

<Pages> 
    <Page><Url Id="6428">http://www.example.com/</Url></Page> 
</Pages> 

그런 다음이 같은 필요합니다.

var q = from f in xml.Descendants("Page") 
     where (string)f.Element("Url") == url 
     select (string)f.Element("Url").Attribute("Id"); 

이 (캐스트를 사용하는 경우 XElement를하고 XAttribute 다양한 기본 유형으로 캐스트를 정의 당신이 .Value을 남길 수 있습니다을이 종종 예기치의 원천이다

0

XPath를 대신 사용해 보셨습니까? 내가 구문을 사용했습니다 이후

그것은 오랜만이야,하지만 쿼리는 다음과 비슷한 보일 것입니다 : SelectNodes()를 사용

/Page[Url='THE_STRING']

, 당신은 쿼리에 맞는 노드의 목록을 얻어야한다을 , 그리고 누구로부터 당신은 속성 값을 얻을 수 있습니다.

관련 문제