C# LINQ语句来选择XML结构中深层的元素
我有XML,它看起来像这样:C# LINQ语句来选择XML结构中深层的元素,c#,.net,linq,linq-to-xml,C#,.net,Linq,Linq To Xml,我有XML,它看起来像这样: <?xml version="1.0" encoding="utf-8"?> <University> <Colleges> <College> <Id> Cambridge </Id> <Dept> <Id> Arts</I
<?xml version="1.0" encoding="utf-8"?>
<University>
<Colleges>
<College>
<Id> Cambridge </Id>
<Dept>
<Id> Arts</Id>
</Dept>
</College>
<College>
<Id> Oxford</Id>
<Dept>
<Id> Philosophy </Id>
</Dept>
</College>
</Colleges>
</University>
剑桥
艺术类
牛津
哲学
我想根据ID返回学院。在另一个场景中,我只想写学院的ID
我不明白如何编写LINQ语句来直接读取Id。我可以在每个阶段使用
子体()
。但是如何选择深入XML结构内部的元素呢?也许您应该使用XPath。语法将比纯Linq查询更简单:
using System.Xml;
using System.Xml.XPath;
...
public foo()
{
XElement yourNode = XElement.Parse(yourstring);
XElement college = root.XPathSelectElement("//College[Id='Oxford']");
}
如果可以在结构中的多个位置使用College节点,则XPAth查询
/University/Colleges/College[Id='OxFord']
将避免冲突问题。也许您应该使用XPAth。语法将比纯Linq查询更简单:
using System.Xml;
using System.Xml.XPath;
...
public foo()
{
XElement yourNode = XElement.Parse(yourstring);
XElement college = root.XPathSelectElement("//College[Id='Oxford']");
}
如果可以在结构中的多个位置使用College节点,则XPAth查询/University/Colleges/College[Id='OxFord']
将避免冲突问题。LINQ-XML
XDocument doc = XDocument.Parse(xmlStr);
var results = doc.Root.Descendants("College")
.Where(ele => ele.Element("Id").Value.Trim() == "Oxford");
LINQ-XML
XDocument doc = XDocument.Parse(xmlStr);
var results = doc.Root.Descendants("College")
.Where(ele => ele.Element("Id").Value.Trim() == "Oxford");
谢谢你的回答。这也是正确的。但不幸的是,我不能接受两个答案!所以我投了更高的票!顺便说一句,我没有选择这个解决方案,因为我不想使用XPath。谢谢你的回答。这也是正确的。但不幸的是,我不能接受两个答案!所以我投了更高的票!顺便说一句,我没有选择这个解决方案,因为我不想使用XPath。