我得到这样的XML:
<menu>
<is>
<not>
<l>Title</l>
<s>url1</s>
<t>1</t>
<is>
<hlua>
<l>Title</l>
<s>url2</s>
<t>0</t>
<is>
<frme>
<l>Title</l>
<s>url3</s>
<t>1</t>
</frme>
</is>
</hlua>
<chrj>
<l>Title</l>
<s>url4</s>
<t>1</t>
<is>
<cgas>
<l>Title</l>
<s>url5</s>
<t>1</t>
<is>
<el12>
<l>Title</l>
<s>url6</s>
<t>1</t>
</el12>
</is>
</cgas>
<cael>
<l>Title</l>
<s>url7</s>
<t>0</t>
</cael>
</is>
</chrj>
</is>
</not>
</is>
<menu>
我不知道子节点的名称,只知道节点“menu”的名称。 我想得到一个值节点列表:“s”如果他们的节点“t”= 1并且他的父节点“t”= 1
我想得到这个清单:
在XML示例中 我没有得到网址“url2”,因为他的节点“t”= 0 我没有得到url“url3”,因为虽然他的节点“t”= 1,但他的父节点“hlua”的节点“t”= 0
如何使用LINQ执行此操作?
谢谢!
我认为这解决了我的问题:
List<XElement> listurls = (from elements in xe.Descendants()
//Elemento
let t_element = elements.Element("t")
let t_element_value = t_element != null ? t_element.Value : String.Empty
//Elemento Padre
let parent_element = elements.Parent.Parent
let t_element_parent = parent_element.Element("t")
let t_element_parent_value = t_element_parent != null ? t_element_parent.Value : "1"
where t_element_value.EndsWith("1") && t_element_parent_value.EndsWith("1") && elements.Element("u").Value!="#" && elements.Element("u").Value != ""
select elements.Element("u")).ToList();
答案 0 :(得分:0)
我不太确定为什么在期望的结果中你期望看到url1 - 没有祖先元素有一个子t元素,其值等于“1”。无论如何,我提出以下问题,你可能想看看:
var xDoc = XDocument.Parse(
@"<menu>
<is>
<not>
<l>Title</l>
<s>url1</s>
<t>1</t>
<is>
<hlua>
<l>Title</l>
<s>url2</s>
<t>0</t>
<is>
<frme>
<l>Title</l>
<s>url3</s>
<t>1</t>
</frme>
</is>
</hlua>
<chrj>
<l>Title</l>
<s>url4</s>
<t>1</t>
<is>
<cgas>
<l>Title</l>
<s>url5</s>
<t>1</t>
<is>
<el12>
<l>Title</l>
<s>url6</s>
<t>1</t>
</el12>
</is>
</cgas>
<cael>
<l>Title</l>
<s>url7</s>
<t>0</t>
</cael>
</is>
</chrj>
</is>
</not>
</is>
</menu>");
var urls = from url in xDoc.Descendants("s")
let ancestorWithTChildElement = url.Parent.Ancestors().FirstOrDefault(e => e.Elements("t").Any())
where (string)url.Parent.Element("t") == "1"
&& ancestorWithTChildElement != null && (string)ancestorWithTChildElement.Element("t") == "1"
select url;
foreach (var urlElement in urls)
{
Console.WriteLine((string)urlElement);
}
结果是:
url4 url5 url6 Press any key to continue . . .
(url1缺失,因为没有祖先元素根本没有t子元素
答案 1 :(得分:0)
我懂了!!! 解决方案:
List<string> listurls = (from a in xe.Descendants("s")
let ancestros = a.Ancestors().Elements("t").FirstOrDefault(e => e.Value.EndsWith("0"))
where ancestros == null
select a.Value).ToList();
= d