我正在开发asp.net移动应用程序。我使用XML作为数据库。我使用XML文件的以下部分来使用LINQ to XML查询数据。
<USER-INTERFACE-DEFINITION>
<MIMICS>
<MIMIC ID="1" NAME="Home">
<SECTIONS>
<SECTION ID ="1" NAME="System Health" CONTROL-TYPE="Button">
<DATAITEMS>
</DATAITEMS>
</SECTION>
<SECTION ID ="2" NAME="Network Status" CONTROL-TYPE="Button">
<DATAITEMS>
</DATAITEMS>
</SECTION>
<SECTION ID ="3" NAME="ESD Status" CONTROL-TYPE="Button">
<DATAITEMS>
</DATAITEMS>
</SECTION>
<SECTION ID ="4" NAME="DWPLEM" CONTROL-TYPE="Button">
<DATAITEMS>
</DATAITEMS>
</SECTION>
<SECTION ID="5" NAME="Manifolds" CONTROL-TYPE="Drowpdown">
<DATAITEMS>
</DATAITEMS>
</SECTION>
<SECTION ID ="6" NAME="Wells" CONTROL-TYPE="Drowpdown">
<DATAITEMS>
</DATAITEMS>
</SECTION>
<SECTION ID ="7" NAME="Alarms" CONTROL-TYPE="Button">
<DATAITEMS>
</DATAITEMS>
</SECTION>
<SECTION ID ="8" NAME="House Keeping" CONTROL-TYPE="Button">
<DATAITEMS>
</DATAITEMS>
</SECTION>
</SECTIONS>
</MIMIC>
</USER-INTERFACE-DEFINITION>
在上面的XML文件中,我想用条件MIMIC ID =“1”来检索SECTION节点的“NAME”属性。我不想修改我现有的XML文件。我有一个带有simialr元素的节点的服务器集合作为上面的XML文件。能否请您提供我可以解决上述问题的任何代码或链接?
答案 0 :(得分:3)
var xml = XElement.Parse("your xml");
var q = from m in xml.Descendants("MIMIC")
where (int)m.Attribute("ID") == 1
from s in m.Descendants("SECTION")
select (string)s.Attribute("NAME");
foreach ( var name in q ) {
Console.WriteLine(name);
}
我在LINQPad中对上面的内容进行了测试,确实产生了:
System Health Network Status ESD Status DWPLEM Manifolds Wells Alarms House Keeping
答案 1 :(得分:0)
也许类似于(不是LINQ,但如果你愿意,可以将它与LINQ一起使用):
var nodes = myXmlDoc.SelectNodes("/USER-INTERFACE-DEFINITION/MIMICS/MIMIC[@ID='1']/SECTION/@NAME");
foreach(var node in nodes)
{
string name = node.Value;
// do something with each name
}
(假设myXmlDoc是使用.Load(yourXmlFileHer)
创建的,并假设USER-INTERFACE-DEFINITION
是XML的根,否则,请以//
代替
答案 2 :(得分:0)
我会尽力尝试,但您可能不会提供相关的XML部分,以便我们更轻松。该部分是否具有此条件或名称。至少我可能会让你开始。
让我们从这开始:
var name = xml.Descendants<SECTION>.Where(s => s.id == 1).GetFirstChild<NAME>();
希望我不会离开,如果是这样的话,我想有人会提供更好的答案。
看到你的XML之后我还不错。此外,当我想到它后裔可能不会工作。
答案 3 :(得分:0)
假设您的XML保存在名为xml
的字符串中,那么:
var root = XElement.Parse(xml);
var results = root
.Descendants("MIMIC")
.Where( e => e.Attribute("ID").Value == "1" )
.SelectMany(e => e.Descendants("SECTION").Attributes("NAME" ) ) ;