Linq检查子元素是否存在于父节点中 [英] Linq to check child element exist in parent node
问题描述
<w:p w:rsidR="00DC605B" w:rsidP="00A60D85" w:rsidRDefault="009A6F33">
<w:r>
<w:rPr>
<w:bCs />
<w:sz w:val="24" />
<w:szCs w:val="24" />
</w:rPr>
<w:t>Flow rate</w:t>
</w:r>
<w:r>
<w:rPr>
<w:bCs />
<w:sz w:val="24" />
<w:szCs w:val="24" />
</w:rPr>
<w:tab />
</w:r>
<w:r>
<w:rPr>
<w:bCs />
<w:sz w:val="24" />
<w:szCs w:val="24" />
</w:rPr>
<w:tab />
<w:t xml:space="preserve">: 0.8 </w:t>
</w:r>
<w:r>
<w:rPr>
<w:bCs />
<w:color w:val="000000" />
<w:sz w:val="24" />
<w:szCs w:val="24" />
</w:rPr>
<w:t>ml/min</w:t>
</w:r>
</w:p>
i want to check whether both
w:tab
w:t xml:space="preserve">: 0.8 w:t
tags exist in <w:r>
我尝试过:
i尝试过多次linq查询但没有成功
What I have tried:
i have tried many linq queries but not succeeded
推荐答案
因为你没有说明你想如何使用结果,我刚创建了一个布尔列表
As you don't state how you want to use the result, I just created a list of booleans
XNamespace xns = "http://www.somesite.com/";
XDocument xdInput = XDocument.Load(@"C:\Temp\input.xml");
XElement xeWP = xdInput.Root.Element(xns + "p");
var existList = from el in xeWP.Elements(xns + "r")
select (el.Element(xns + "tab") != null && el.Element(xns + "t") != null);
为了使它工作我将XML数据包含在新的根元素中
To make it work I enclosed your XML data in a new root element
<root xmlns:w="http://www.somesite.com/">
<w:p w:rsidR="00DC605B" w:rsidP="00A60D85" w:rsidRDefault="009A6F33">
...
</w:p>
</root>
这个片段只打印出结果:
This snippet just prints out the result:
for (int i = 0; i < existList.Count(); i++)
Console.WriteLine("Item {0} : {1}", i + 1, existList.ElementAt(i));
如果必须使用LINQ
(虽然使用System.IO.File.ReadAllLines
会更容易)
If you must useLINQ
(although this would be easier withSystem.IO.File.ReadAllLines
)
//Load xml
XDocument xdoc = XDocument.Load("LinqTest1.xml");
//Run query
var lv1s = from lv1 in xdoc.Descendants("tab")
select new
{
val = lv1.Value
};
foreach (var lv1 in lv1s)
{
Debug.Print(lv1.val);
}
此代码不适用于您的xml,请查看有关命名空间的信息:
如何:控制命名空间前缀(C#)(LINQ to XML) [ ^ ]
我只是通过重新格式化你的xml来实现它:
< p>
< r>
< rPr>
< bCs />
< sz val =24 />
< szCs val =24/>
< / rPr>
< t>流量< ; / t>
< / r>
< r>
< rPr>
< ; bCs />
< sz val =24/>
< szCs val =24/>
< / rPr>
< tab />
< / r>
< r>
< rPr>
< bCs />
< sz val =24/>
< szCs val =24/>
< / rPr>
< tab />
< t val =0.8/>
< / r>
< r>
< rPr> ;
< bCs />
< color val =000000/>
< sz val =24 />
< szCs val =24/>
< / rPr>
< t> ml / min< ; / t>
< / r>
< / p>
This code won't work with your xml, take a look here for information about namespaces:
How to: Control Namespace Prefixes (C#) (LINQ to XML)[^]
I only got it working by reformatting your xml like this:
<p>
<r>
<rPr>
<bCs />
<sz val="24" />
<szCs val="24" />
</rPr>
<t>Flow rate</t>
</r>
<r>
<rPr>
<bCs />
<sz val="24" />
<szCs val="24" />
</rPr>
<tab />
</r>
<r>
<rPr>
<bCs />
<sz val="24" />
<szCs val="24" />
</rPr>
<tab />
<t val="0.8" />
</r>
<r>
<rPr>
<bCs />
<color val="000000" />
<sz val="24" />
<szCs val="24" />
</rPr>
<t>ml/min</t>
</r>
</p>
这篇关于Linq检查子元素是否存在于父节点中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!