Linq to Xml:在选择父节点时突出显示各个子节点
Linq to Xml : highlighting respective child nodes upon selecting parent node
我正在处理 LINQ to XML 查询,如果我 select 分支(父节点),只有特定于该分支的子节点应该突出显示。
我正在开发一个 ASP.NET 工具,因为我需要读取一个 XML 文件,它首先读取父节点,基于用户 selection,它将读取子节点,现在是问题如果我 select 父节点,它正在从所有父节点读取所有子节点,所以我需要一个查询,它应该在 selecting 分支 [=13= 时读取相应的子节点]
<branch name="TigerDrop">
<milestones>
<milestone name="BETA1"></milestone>
<milestone name="BETA2"></milestone>
</milestones>
</branch>
<branch name="EagleDrop">
<milestones>
<milestone name="RFLD"></milestone>
<milestone name="RFVD"></milestone>
</milestones>
</branch>
<branch name="LionDrop">
<milestones>
<milestone name="WIP2"></milestone>
<milestone name="WIP3"></milestone>
</milestones>
</branch>
我试过这样,
public List<string> GetMilestones()
{
string inputFilePath = Server.MapPath(@"~/DropList.xml");
var elements = XDocument.Load(inputFilePath);
var result = (from item in elements.Descendants("milestones").Descendants("milestone").Where(item => (string) item == "branch")
.SelectMany(item => item.Parent.Elements("milestones").Elements("milestone"))).ToList();
return result;
}
试试这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string input =
"<Root>" +
"<branch name=\"TigerDrop\">" +
"<milestones>" +
"<milestone name=\"BETA1\"></milestone>" +
"<milestone name=\"BETA2\"></milestone>" +
"</milestones>" +
"</branch>" +
"<branch name=\"EagleDrop\">" +
"<milestones>" +
"<milestone name=\"RFLD\"></milestone>" +
"<milestone name=\"RFVD\"></milestone>" +
"</milestones>" +
"</branch>" +
"<branch name=\"LionDrop\">" +
"<milestones>" +
"<milestone name=\"WIP2\"></milestone>" +
"<milestone name=\"WIP3\"></milestone>" +
"</milestones>" +
"</branch>" +
"</Root>";
XDocument elements = XDocument.Parse(input);
string parent = "TigerDrop";
List<XElement> result = elements.Descendants("branch").Where(item => item.Attribute("name").Value == parent).Descendants("milestone").ToList();
}
}
}
您可以使用以下 LINQ 查询来完成:
public static List<string> GetMilestoneNames(XDocument doc, string branchName)
{
var query = doc.Root.Descendants("branch")
.Where(e => e.Attributes("name").Any(a => a.Value == branchName))
.Elements("milestones")
.Elements("milestone")
.Attributes("name").Select(a => a.Value);
return query.ToList();
}
或使用以下 XPath 查询:
public static List<string> GetMilestoneNames(XDocument doc, string branchName)
{
var query = (IEnumerable)doc.XPathEvaluate(string.Format("//branch[@name='{0}']/milestones/milestone/@name", branchName));
return query.Cast<XAttribute>().Select(a => a.Value).ToList();
}
我正在处理 LINQ to XML 查询,如果我 select 分支(父节点),只有特定于该分支的子节点应该突出显示。 我正在开发一个 ASP.NET 工具,因为我需要读取一个 XML 文件,它首先读取父节点,基于用户 selection,它将读取子节点,现在是问题如果我 select 父节点,它正在从所有父节点读取所有子节点,所以我需要一个查询,它应该在 selecting 分支 [=13= 时读取相应的子节点]
<branch name="TigerDrop">
<milestones>
<milestone name="BETA1"></milestone>
<milestone name="BETA2"></milestone>
</milestones>
</branch>
<branch name="EagleDrop">
<milestones>
<milestone name="RFLD"></milestone>
<milestone name="RFVD"></milestone>
</milestones>
</branch>
<branch name="LionDrop">
<milestones>
<milestone name="WIP2"></milestone>
<milestone name="WIP3"></milestone>
</milestones>
</branch>
我试过这样,
public List<string> GetMilestones()
{
string inputFilePath = Server.MapPath(@"~/DropList.xml");
var elements = XDocument.Load(inputFilePath);
var result = (from item in elements.Descendants("milestones").Descendants("milestone").Where(item => (string) item == "branch")
.SelectMany(item => item.Parent.Elements("milestones").Elements("milestone"))).ToList();
return result;
}
试试这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string input =
"<Root>" +
"<branch name=\"TigerDrop\">" +
"<milestones>" +
"<milestone name=\"BETA1\"></milestone>" +
"<milestone name=\"BETA2\"></milestone>" +
"</milestones>" +
"</branch>" +
"<branch name=\"EagleDrop\">" +
"<milestones>" +
"<milestone name=\"RFLD\"></milestone>" +
"<milestone name=\"RFVD\"></milestone>" +
"</milestones>" +
"</branch>" +
"<branch name=\"LionDrop\">" +
"<milestones>" +
"<milestone name=\"WIP2\"></milestone>" +
"<milestone name=\"WIP3\"></milestone>" +
"</milestones>" +
"</branch>" +
"</Root>";
XDocument elements = XDocument.Parse(input);
string parent = "TigerDrop";
List<XElement> result = elements.Descendants("branch").Where(item => item.Attribute("name").Value == parent).Descendants("milestone").ToList();
}
}
}
您可以使用以下 LINQ 查询来完成:
public static List<string> GetMilestoneNames(XDocument doc, string branchName)
{
var query = doc.Root.Descendants("branch")
.Where(e => e.Attributes("name").Any(a => a.Value == branchName))
.Elements("milestones")
.Elements("milestone")
.Attributes("name").Select(a => a.Value);
return query.ToList();
}
或使用以下 XPath 查询:
public static List<string> GetMilestoneNames(XDocument doc, string branchName)
{
var query = (IEnumerable)doc.XPathEvaluate(string.Format("//branch[@name='{0}']/milestones/milestone/@name", branchName));
return query.Cast<XAttribute>().Select(a => a.Value).ToList();
}