如何使用 Linq to XML 解析 XML 字符串并定位所有节点的值以指定字母开头?

How can I use Linq to XML to parse an XML string and locate all nodes with a value that starts with a specified letter?

给定一串 XML 文本,例如

      "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
        "<directory dirname=\"c\">" +
            "<directory dirname=\"documents\">" +
                "<directory dirname=\"daves projects 2015\" />" +
                "<directory dirname=\"vics projects 2015\" />" +
                "<directory dirname=\"daves projects 2014\" />" +
            "</directory>" +
            "<directory dirname=\"daves projects archive\" />" +
        "</directory>";

当前使用 Linq 将此字符串解析为 XML 的首选方法是什么,以便它 returns 以 "dave" 开头的目录名称列表。或者有比使用 Linq 更好的方法 XML

我需要一个字符串列表结果,如下所示;

2015 年戴夫斯项目

2014 年戴夫斯项目

daves 项目归档

我尝试使用以下方法;

public static void Main(string[] args)
{
    string xml =
      "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
        "<directory dirname=\"c\">" +
            "<directory dirname=\"documents\">" +
                "<directory dirname=\"daves projects 2015\" />" +
                "<directory dirname=\"vics projects 2015\" />" +
                "<directory dirname=\"daves projects 2014\" />" +
            "</directory>" +
            "<directory dirname=\"daves projects archive\" />" +
        "</directory>";

    var Folders = ParseXmlString(xml, "dave");
    foreach (XElement name in Folders)
        Console.WriteLine(name.Value);
}



private static List<XElement> ParseXmlString(string xmlStr, string searchValue)
{
    List<XElement> result = new List<XElement>();

    try
    {
        var str = XElement.Parse(xmlStr);
        result = str.Elements("directory").Where(x => x.Element("dirname").Value.StartsWith(searchValue)).ToList();
    }
    catch (Exception ex)
    {

        throw ex;
    }

    return result;
}

但是结果总是空的。

有什么建议吗?

改变函数如下...

  1. 在调用方法中,将类型改为

    foreach (XAttribute name in Folders)
    
  2. 如下更改 ParseXmlString。

    private static List<XAttribute> ParseXmlString(string xmlStr, string searchValue)    
    {
            List<XAttribute> result = new List<XAttribute>();    
            try
            {
                XDocument doc = XDocument.Parse(xmlStr);
    
                result = doc.Descendants("directory")
                            .Attributes("dirname")
                            .Where(x => x.Value.StartsWith("d"))
                            .ToList();                
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return result;
    }
    

如果有帮助请告诉我..

在 VB 中,使用 XElement 它将是

    Dim xe As XElement = XElement.Parse(xml)
    Dim ie As IEnumerable(Of String) = From el In xe...<directory>
                                       Where el.@dirname.StartsWith("dave")
                                       Select el.@dirname