阅读和分析XML字符串

问题描述:

请有人可以帮助我解决如何分析以下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返回 –

由于您没有提供任何您已经尝试过的代码,我可以指导您一点。

  1. 使用XDocument,以帮助您解析
  2. 使用Descendants方法(IT连锁)来查找您的节点/元素
  3. 呼叫类似First()得到您想要的数据

检查this回答关于使用XDocumentDescendants 的一个小例子希望这会有所帮助

+0

说实话,这不是我以前做过的事情,只是我被要求看的东西。我搜索并尝试了不同的东西,这些东西并不真正给我想要的东西。 –

+0

@ Richard.Gale我已经更新了答案,并为您提供了一个示例链接。 –

使用此引用将您的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); 

}