2012-11-27 140 views
0

解析XML我有一個XML文件是這樣的:使用C#和Windows Phone 7

<xml> 
    <students> 
     <person name=jhon/> 
     <person name=jack/> 
     ... 
    </students> 
    <teachers> 
     <person name="jane" /> 
     <person name="jane" /> 
     ... 
    </teachers> 
    </xml> 

如果我用這個代碼:

var xml = XDocument.Parse(myxmlstring, LoadOptions.None); 
foreach(XElement studentelement in xml.Descendants("person")) 
{ 
    MessageBox.Show(studentelement.Attribute("name").Value); 
} 

一切正常!但是,我不知道我是否在迭代學生或老師。

但是當我嘗試:

var a = xml.Element("students"); 

一個爲空!

如何在c#中選擇xml文檔中的特定元素?

如果我只能先對學生進行迭代,填寫一些列表框並對教師進行迭代並執行其他操作,那將會非常棒。 :)

的xml文件不能老是被修改,以防萬一......

最後,所有其實我是想用這一切的是獲取特定元素的所有孩子在我的文件。

謝謝大家!

回答

1

Element只返回直接子節點。要遞歸瀏覽xml樹,請改爲使用Descendants

依次列舉學生那麼老師,你可以這樣做:

var xml = XDocument.Parse(myxmlstring, LoadOptions.None); 

var students = xml.Descendants("students"); 
var teachers = xml.Descendants("teachers"); 

foreach (var studentElement in students.Descendants("person")) 
{ 
    MessageBox.Show(studentElement.Attribute("name").Value); 
} 

foreach (var teacherElement in teachers.Descendants("person")) 
{ 
    MessageBox.Show(teacherElement.Attribute("name").Value); 
} 
4

但是,當我嘗試:var a = xml.Element(「students」);

a爲空!

是的,因爲xml是文檔,而且也只有一個以下直接元素 - 所謂xml。如果你使用:

var students = xml.Root.Element("students"); 

相反,它會尋找<students>直接根元素之下,而是和它的工作。

或者,你可以使用兩次Element

var students = xml.Element("xml").Element("students"); 

或者使用Descendants,當然。

此外,你可以得到與Parent性的元素的父元素...因此,如果你想遍歷所有person元素,並且使用的父元素的名稱出於某種原因,你當然可以這樣做。