示例代码查找其子元素'值与texbox中输入的值匹配的元素的属性名称
现在查看我的代码和XML文件,您会发现它们与上述链接完全相同。问题是我的代码只打印与文本框值匹配的第一个组。
XML
<?xml version="1.0" encoding="utf-8"?>
<groups>
<group name="a">
<ip>10.3.4</ip>
<ip>10.1.4</ip>
</group>
<group name="b">
<ip>10.2.1</ip>
<ip>10.3.4</ip>
<ip>10.55.55</ip>
</group>
</groups>
代码
XElement root = XElement.Load("c:\etc);
IEnumerable<XElement> tests =
from el in root.Elements("group")
where (string)el.Element("ip") == textBox1.Text
select el;
foreach (XElement el in tests)
Console.WriteLine((string)el.Attribute("name"));
问题出在where子句中。因为如果我对它进行评论,系统将打印两个组名,但是当where子句处于活动状态时,它总是只返回1个组。也可以使用FirstOrDefault() - _-
答案 0 :(得分:0)
var tests =
from el in root.Elements("group")
where el.Elements("ip").Any(o => o.Value == textBox1.Text)
select el;
答案 1 :(得分:0)
试试这段代码:
XElement root = XElement.Load(@"your path to a file");
//set text box to some default value to test if function will work
textBox1.Text = "10.1.4";
//here I used etension method, commented is alternative version, for better understanding
IEnumerable<XElement> tests = root.Elements("group").Where(gr => gr.Elements("ip").Any(ip => ip.Value == textBox1.Text));
//IEnumerable<XElement> tests = root.Elements("group").Where(gr => gr.Elements("ip").Where(ip => ip.Value == textBox1.Text).Count() > 0);
foreach (XElement el in tests)
//Console.WriteLine((string)el.Attribute("name"));
MessageBox.Show((string)el.Attribute("name"));
您将代码单个元素与文本框的文本进行比较时,您的代码无法正常工作。你想要的是检查ip
元素中是否有任何元素等于指定的文本。
答案 2 :(得分:0)
在两组中你都有相同的ip
<ip> 10.3.4 </ ip>
在这种情况下,它甚至可以将两个小组聚集在一起。
我建议通过检查'姓名'来再做一个条件。
答案 3 :(得分:0)
db.collection_name.find().pretty()
从任何子ip元素包含文本框文本的组中选择属性名称。