c# - 使用 XDocument.Descendants 获取所有“信号”,但只需要某些“信号”
问题描述
我有一个这样的xml:
<signals>
<signal name="N$41"></signal>
<signal name="S$80"></signal>
<signal name="EPD_PWR">
<contactref element="HS1" pad="40" />
</signal>
...
</signals>
我通过使用这段代码得到所有的信号:
var result = System.Xml.Linq.XDocument.Load(filename).Descendants("signal");
foreach (var sig in result)
{
signals += sig.Attribute("name").Value.ToString() + " ";
}
MessageBox.Show(signals);
问题是我只想存储所有具有元素的contactref的“信号”,即“HS1”,如果它们没有contactref或与“HS1”不同的元素名称,则不要存储它们。
如果可能的话,我会怎么做?
解决方案
您只需要通过以下方式使用普通的 LINQ 过滤Where
:
var result = XDocument.Load(filename)
.Descendants("signal")
.Where(s => s.Element("contactref")?.Attribute("element")?.Value == "HS1");
然后我还建议使用string.Join
来建立你的字符串:
string signals = string.Join(" ", result.Select(s => s.Attribute("EPD_PWR").Value)));
推荐阅读
- twitter-bootstrap - 查看后如何折叠可切换选项卡中的选项卡窗格内容?
- json - 如何使用 sql 查询以行存储模式在 snappydata 表中加载 JSON 数据?
- python-2.7 - 从 html 页面运行 python 脚本
- java - 卡在使用正则表达式仅提取 JSON 的根元素
- javascript - 无法在 ejs 模板中调用函数
- vb.net - Windows 窗体应用程序设置为 MdiContainer,子窗体在加载时更改显示
- excel - Excel - 在单个公式中查找对应的值
- python - Python pcl 没有属性 from_array
- karate - 如何使用 karate.set() 在 json 中添加新键
- vbscript - QTP/UFT - 将 Browser().Page() 存储为变量