.NET LINQ 2XML 解析 XML 并获取具有特定名称的所有节点
.NET LINQ2XML parsing XML and getting all nodes with specifc name
在使用了一些其他解析方法 XML 之后,我正在尝试迁移到使用 Linq2XML,如下所示:
string xml = "//some xml file here";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
for (int i = 0; i < doc.GetElementsByTagName("Title").Count; i++)
{
// get all elements values that have this tag name
}
我现在想将其翻译成 LINQ2XML 并基本上编写针对此测试 XML 文件的查询..
有人可以帮帮我吗?我是否必须将它存储到标题数组或类似的数组中?
您可以在根元素上使用 XContainer.Descendants(XName)
(or XElement.DescendantsAndSelf(XName)
):
var doc = XDocument.Parse(xml);
foreach (var element in doc.Descendants("Title"))
{
// element is an element with the name "Title" -- process it however
// you want.
}
请注意,如果您通过在 foreach
循环中添加或删除元素来修改文档,则需要像这样对列表进行快照:
foreach (var element in doc.Descendants("Title").ToList())
{
// element is an element with the name "Title" -- process it however
// you want.
}
最后,如果您只想查找具有特定 local name 的元素并忽略名称空间,您可以这样做:
foreach (var element in doc.Descendants().Where(e => e.Name.LocalName == "Title"))
{
// element is an element with the local name "Title" -- process it however
// you want.
}
在使用了一些其他解析方法 XML 之后,我正在尝试迁移到使用 Linq2XML,如下所示:
string xml = "//some xml file here";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
for (int i = 0; i < doc.GetElementsByTagName("Title").Count; i++)
{
// get all elements values that have this tag name
}
我现在想将其翻译成 LINQ2XML 并基本上编写针对此测试 XML 文件的查询..
有人可以帮帮我吗?我是否必须将它存储到标题数组或类似的数组中?
您可以在根元素上使用 XContainer.Descendants(XName)
(or XElement.DescendantsAndSelf(XName)
):
var doc = XDocument.Parse(xml);
foreach (var element in doc.Descendants("Title"))
{
// element is an element with the name "Title" -- process it however
// you want.
}
请注意,如果您通过在 foreach
循环中添加或删除元素来修改文档,则需要像这样对列表进行快照:
foreach (var element in doc.Descendants("Title").ToList())
{
// element is an element with the name "Title" -- process it however
// you want.
}
最后,如果您只想查找具有特定 local name 的元素并忽略名称空间,您可以这样做:
foreach (var element in doc.Descendants().Where(e => e.Name.LocalName == "Title"))
{
// element is an element with the local name "Title" -- process it however
// you want.
}