【发布时间】:2017-06-01 08:43:10
【问题描述】:
我有以下 xml 架构,我想在哪里使用 linq 来查询 2 个属性。我四处寻找,但没有找到合适的解决方案。
<Object class="MA" Name="Sample">
<bist name="act">false</bist>
<bist name="Dynamic">1234</bist>
<bist name="Fast">false</bist>
<bist name="plane">false</bist>
<bist name="Tnl">2232</bist>
</Object>
对于上面的xml,在得到“Dynamic”的值并与oldTnl变量比较后,如果相等,我想选择或获取“Tnl”值(2232)。
目前,我正在使用此代码进行测试并成功获得“动态”的值,但我真的想要“Tnl”的值。
private void mGetTnlFromXML(string oldTnl)
{
XDocument doc = XDocument.Load("sample.xml");
var bt = from p in doc.Descendants()
where (string)p.Attribute("name") == "Dynamic"
select p;
foreach (string b in bt)
{
if (b == oldTnl)
{
MessageBox.Show(b.ToString());
}
}
}
类似:
private void mGetTnlFromXML(string oldTnl)
{
XDocument doc = XDocument.Load("sample.xml");
var bt = from p in doc.Descendants()
where (string)p.Attribute("name") == "Dynamic"
//is there are way i can also find "Tnl" here and use
//later?
select p; //or select "Tnl" here.
foreach (string b in bt)
{
if (b == oldTnl)
{
//select "Tnl" value (2232)
//use "Tnl" value (2232)
//do something....
}
}
}
提前谢谢...我还在学习 LinQ :)。
更新的 XML:
<Root>
<Data>
<Object class="MA" Name="Sample">
<bist name="act">false</bist>
<bist name="Dynamic">1234</bist>
<bist name="Fast">false</bist>
<bist name="plane">false</bist>
<bist name="Tnl">2232</bist>
</Object>
</Data>
</Root>
【问题讨论】:
-
所以你想要
bist元素的值,其中name属性是 "Tnl" 并且存在具有 @987654328 的兄弟bist元素@属性值为"dynamic"? -
我需要动态比较,然后我会得到 Tnl。如果动态不相等或不存在,则不做任何事情。
标签: c# xml linq linq-to-xml