如何使用 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;
}
但是结果总是空的。
有什么建议吗?
改变函数如下...
在调用方法中,将类型改为
foreach (XAttribute name in Folders)
如下更改 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
给定一串 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;
}
但是结果总是空的。
有什么建议吗?
改变函数如下...
在调用方法中,将类型改为
foreach (XAttribute name in Folders)
如下更改 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