2012-12-30 3 views
0

Windows Phone 용 Visual Studio를 사용하고 있고 XML 데이터의 부모에 속성이있는 경우 XML 판독기 용 코드가 작동하지 않습니다.xmlns 속성을 사용할 때 XML 판독기에서 요소를 찾을 수 없습니다.

내 C# 코드

namespace youtube_xml 
{ 
    public partial class MainPage : PhoneApplicationPage 
    { 
    // Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 
     SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape; 
    } 
    private void listBox1_Loaded(object sender, RoutedEventArgs e) 
    { 
     var element = XElement.Load("Authors.xml"); 
     var authors = 
     from var in element.Descendants("feed") 
     select new Authors 
     { 
      AuthorName = var.Attribute("scheme").Value, 
     }; 

     listBoxAuthors.DataContext = authors; 
    } 
    public ImageSource GetImage(string path) 
    { 
     return new BitmapImage(new Uri(path, UriKind.Relative)); 
    } 
    } 
} 

실무 XML 데이터 데이터를 작동하지

<?xml version='1.0' encoding='UTF-8'?> 
<feed> 
    <category scheme='http://schemas.google.com/g/2005#kind'/> 
</feed> 

(참고 : 루트 요소 "공급"의 속성 "의 xmlns")

<?xml version='1.0' encoding='UTF-8'?> 
<feed xmlns='http://www.w3.org/2005/Atom' > 
    <category scheme='http://schemas.google.com/g/2005#kind'/> 
</feed> 
+0

문제가 더 잘 반영 될 수 있도록 제목을 업데이트했습니다 (되돌리기/수정을 자유롭게하십시오). 다음 번에는 일반 데스크톱 버전에서 동일한 코드를 사용해보십시오. 응답하지 않으려는 사람들을 혼란스럽게 할 수있는 추가 태그 (예 : windows-phone-7)를 추가하지 마십시오. –

답변

1

세계에 오신 것을 환영합니다 XML namespace! 문제는 "속성이 있습니다"라는 사실이 아닙니다. 아래의 모든 것을 네임 스페이스에 포함시키는 것은 사실입니다. .Attribute("scheme")은 더 이상 빈 네임 스페이스의 내용 만 검색하기 때문에 더 이상 말할 수 없습니다. 네임 스페이스는 연산자 오버로딩을 기반으로하는기구를 통해 사용됩니다.

XNamespace atom = "http://www.w3.org/2005/Atom'"; 

// And now you can say: 

.Descendants(atom + "feed") 
.Attribute(atom + "scheme") 

등등. XNamespace 변수에 문자열을 할당하는 기능은 암시 적 변환 연산자 덕분입니다. 여기에서 +은 실제로 XName을 구성합니다. (실제로는 문자열에서 암시 적으로 변환됩니다. 따라서 매개 변수 유형이 문자열이 아니더라도 일반 문자 .Elements("feed")이 작동합니다.)

유용한 정보 : 속성을 .Value을 사용하는 대신 특정 유형을 사용합니다 (예 : (string)foo.Attribute(atom + "scheme")). 또한 int과 같이 여러 유형의 다른 유형과도 작동합니다.

관련 문제