2012-04-21 24 views
0

所以我能夠選擇一個特定節點下所有的結果,但我有下面的XML找到一個子節點並使用變量獲取它的值。 Windows phone的

<ArrayOfStop> 
<Stop> 
    <StopName>Rajdutt Restaurant</StopName> 
    <route_stop /> 
    <route_stop_stop /> 
    <route_stop_timetable_stop /> 
    <stopId>6400</stopId> 
</Stop> 
<Stop> 
    <StopName>Cysleys Farm (by request only)</StopName> 
    <route_stop /> 
    <route_stop_stop /> 
    <route_stop_timetable_stop /> 
    <stopId>6401</stopId> 
</Stop> 
<ArrayOfStop> 

如果我要選擇stopId如果stopname是Cysleys農場(只能通過申請獲取)會怎樣一個去了嗎?

我有以下代碼:

XDocument loadedData = XDocument.Load("People.xml"); 

var data = from query in loadedData.Descendants("ArrayOfStop") 
      select new Person 
      { 
      StopName = (string)query.Element("StopName") 
      }; 

listBox.ItemsSource = data; 

編輯:

var data = from query in loadedData.Descendants("ArrayOfStop") 
    where query.Element("StopName").Value == "Cysleys Farm (by request only)" 
    select query.Element("StopId").Value; 

select new Person 
{ 
    FirstName = (string)query.Element("StopName"), 
    //LastName = (string)query.Element("Long"), 
    //Age = (int)query.Element("age") 
}; 

listBox.ItemsSource = data; 

Visual Studio Editor

EDIT 2

執行項目需要進入一個列表框?因爲我需要在網址上使用字符串格式的值。

回答

1
 var doc = 
      XDocument.Parse(
       "<ArrayOfStop><Stop><StopName>Rajdutt Restaurant</StopName><route_stop /><route_stop_stop /><route_stop_timetable_stop /><stopId>6400</stopId></Stop><Stop><StopName>Cysleys Farm (by request only)</StopName><route_stop /><route_stop_stop /><route_stop_timetable_stop /><stopId>6401</stopId></Stop></ArrayOfStop>"); 

     var list = (from item in doc.Descendants("Stop") 
        where (string) item.Element("StopName") == "Cysleys Farm (by request only)" 
        select (string)item.Element("stopId")).ToList(); 
+0

謝謝你,如果我把在如上所示,然後有錯誤,我不能把結果放入列表框。 – 2012-04-21 18:36:52

+0

你會得到什麼樣的錯誤? – MarcinJuraszek 2012-04-21 18:42:53

+0

已經放入圖片,錯誤排序: 錯誤4 \t;預計\t 錯誤1 \t只有轉讓,電話,遞增,遞減和新對象表達式可以用作聲明 \t \t 錯誤3 \t「查詢」不在當前上下文 錯誤2 \t存在名稱名稱'select'在當前環節 – 2012-04-21 18:49:11

0

這會得到一個具有匹配值的單個節點。如果您期望多個節點具有匹配的值並且只需要第一個節點,則使用FirstOrDefault而不是SingleOrDefault

string search = "Cysleys Farm (by request only)"; 
var query = doc.Root.Elements() 
      .SingleOrDefault(x => x.Element("StopName").Value == search); 

if (query != null) 
{ 
    // if the query is not null, then this will be 
    // a single node with a root of <Stop> 
    string id = query.Element("stopId").Value; 
} 
0

做的另一種方法是:

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load("People.xml"); 

// Select the 'StopId' node whose StopName is 'Cysleys Farm (by request only)' 
XmlNode stopIdNode = xmlDoc.SelectSingleNode("/ArrayOfStop/Stop[StopName='Cysleys Farm (by request only)']/stopId"); 

string stopId = stopIdNode.InnerText; 

如果有多個節點具有相同StopName,那麼你可以將它們存儲在一個列表:

List<string> stopIdList = new List<string>(); 

foreach (XmlNode stopIdNode 
     in xmlDoc.SelectNodes 
     ("/ArrayOfStop/Stop[StopName='Cysleys Farm (by request only)']/stopId")) 
{ 
    stopIdList.Add(stopIdNode.InnerText); 
} 
相關問題