2011-06-17 16 views
3

XMLファイルから値を取り出し、文字列配列に入れようとしています。ここで私はこれを達成するために使用しているコードです:XML文書から文字列配列に値を取ります

public static string[] GetStringArray(string path) 
{ 
    var doc = XDocument.Load(path); 

    var services = from service in doc.Descendants("Service") 
        select (string)service.Attribute("name"); 

    return services.ToArray(); 
} 

は、しかし、私はそれを使用するたびに私はこことNullReferenceExceptionを取得:このメソッドの

foreach (string @string in query) 
    WeatherServicesCBO.Items.Add(@string); 

public void InitializeDropDown(string XmlFile, string xpath) 
{ 

    //string[] services = { "Google Weather", "Yahoo! Weather", "NOAA", "WeatherBug" }; 
    string[] services = GetStringArray("SupportedWeatherServices.xml"); 
    IEnumerable<string> query = from service in services 
           orderby service.Substring(0, 1) ascending 
           select service; 

    foreach (string @string in query) 
     WeatherServicesCBO.Items.Add(@string); 
} 

EDITを使用しているXMLファイルは次のとおりです

<?xml version="1.0" encoding="utf-8" ?> 
<SupportedServices> 
    <Service> 
    <name>Google Weather</name> 
    <active>Yes</active> 
    </Service> 
    <Service> 
    <name>WeatherBug</name> 
    <active>No</active> 
    </Service> 
    <Service> 
    <name>Yahoo Weather</name> 
    <active>No</active> 
    </Service> 
    <Service> 
    <name>NOAA</name> 
    <active>No</active> 
    </Service> 
</SupportedServices> 
+0

は、だから、XMLに目を通すのですか?欠落しているものは、 'query'を作成するときには表示されませんが、反復するときには表示されません。 –

答えて

4

XMLがname要素を持って:あなたは、あなたにGetStringArrayクエリを変更する必要があります。 name属性を読み込もうとしています。あなたはnullを返せません。適切な変更を加えます。

var services = from service in doc.Descendants("Service") 
       select (string)service.Element("name"); 
3

select (string)service.Attribute("name");

"name"はサービス属性ではありません。それは子要素です。

2

nameは、Serviceの属性ではなく、子要素です。

var services = from service in doc.Descendants("Service") 
       select service.Element("name").Value; 
1

アレイ内のノードのリストを取得します:すべてのサービスは名前を持っている場合

XmlDocument xDocument; 
xDocument.Load(Path); 
var xArray = xDocument.SelectNodes("SupportedServices/Service/name"); 
関連する問題