2017-06-29 94 views
-2

請有人可以幫助我解決如何分析以下XML:閱讀和分析XML字符串

<staff name="peter"> 
    <staff name="martin"> 
    <staff name="mike" /> 
    </staff> 

    <staff name="stuart" /> 
</staff> 

我如何引用在「」值是多少? 基本上我想返回所有員工,他們的名字以特定字母開頭,例如'm'

+3

[如何:查找具有特定屬性(XPath的LINQ元素到XML)(C#)](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/how-to-find-elements-with-a-specific-attribute- xpath-linq-to-xml) –

+0

這看起來非常奇怪的構造XML,它是一個減少ve更大文件的rsion。 – PaulF

+0

它來自一個Api返回 –

回答

0

由於您沒有提供任何您已經嘗試過的代碼,我可以指導您一點。

  1. 使用XDocument,以幫助您解析
  2. 使用Descendants方法(IT連鎖)來查找您的節點/元素
  3. 呼叫類似First()得到您想要的數據

檢查this回答關於使用XDocumentDescendants 的一個小例子希望這會有所幫助

+0

說實話,這不是我以前做過的事情,只是我被要求看的東西。我搜索並嘗試了不同的東西,這些東西並不真正給我想要的東西。 –

+0

@ Richard.Gale我已經更新了答案,併爲您提供了一個示例鏈接。 –

0

使用此引用將您的xml文件讀入對象。

public static T DeserializeXMLFileToObject<T>(string XmlFilename) 
{ 
    T returnObject = default(T); 
    if (string.IsNullOrEmpty(XmlFilename)) return default(T); 

    try 
    { 
     StreamReader xmlStream = new StreamReader(XmlFilename); 
     XmlSerializer serializer = new XmlSerializer(typeof(T)); 
     returnObject = (T)serializer.Deserialize(xmlStream); 
    } 
    catch (Exception ex) 
    { 
     ExceptionLogger.WriteExceptionToConsole(ex, DateTime.Now); 
    } 
    return returnObject; 
} 

您調用此方法使用是這樣的:

MyObjType MyObj = DeserializeXMLFileToObject<MyObjType>(FilePath); 

一旦你有對象:

for(int i = 0; i < StaffMemebers.length; i++) 
{ 
    NamesStartingWithLetter(StaffMemebers[i],'A',ref NameList); 
} 

public void NamesStartingWithLetter(StaffObject staffMember,char letter,ref List<string> NamesFound) 
{ 
    if(staffMember.Name[0]==letter) 
      NamesFound.Add(staffMember.Name); 
    if(staffMember.staff!=null) 
      NamesStartingWithLetter(staffMember.staff, letter, ref NamesFound); 

}