c# - 如何在 C# 中解析多个元素属性值
问题描述
我有以下xml;
<Main>
<Item ItemID="123456">
<Devtm PL="SP"></Devtm>
<Devtm PL="RV"></Devtm>
</Item>
</Main>
我正在尝试获取属于 Devtm 元素的所有值。这个元素可以有多个带有 PL 属性的值。
using (WebResponse response = request.GetResponse())
{
using (StreamReader rd = new StreamReader(response.GetResponseStream()))
{
string soapResult = rd.ReadToEnd();
var xdoc = XDocument.Parse(soapResult);
var lineItemDetails = xdoc.Descendants("Main");
foreach (var lineItemDetail in lineItemDetails)
{
var Devtm = lineItemDetail.Element("Item")?.Element("Devtm")?.Attribute("PL")?.Value;
Console.WriteLine(Devtm);
}
}
}
这只是给了我第一个元素值,即“SP”。我怎样才能得到第二个值呢?我不需要循环,因为我知道那里只有 2 个值。
由于某些原因,LINQ 也不是一种选择。我怎样才能用 XDocument 实现它?
解决方案
您可以稍微重写您的代码以获得预期的结果。使用Descendants
方法访问一个Item
元素,然后遍历它的节点
var lineItemDetails = xdoc.Root?.Descendants("Item");
foreach (var lineItemDetail in lineItemDetails?.Nodes().OfType<XElement>())
{
var Devtm = lineItemDetail?.Attribute("PL")?.Value;
Console.WriteLine(Devtm);
}
它打印SP
和RV
.
如果你想使用基于索引的访问,没有循环,这可以帮助
var lineItemDetails = xdoc.Root?.DescendantsAndSelf("Item").FirstOrDefault();
var nodes = lineItemDetails?.DescendantNodes().OfType<XElement>().ToList();
Console.WriteLine(nodes?[0]?.Attribute("PL")?.Value);
Console.WriteLine(nodes?[1]?.Attribute("PL")?.Value);
推荐阅读
- reactjs - 添加图层时,底图上的 Mapbox 单击侦听器失败
- javascript - 将所有数据导出到 Excel,包括来自分页的数据
- php - 注销时如何更改我的帐户菜单 Woocommerce 的链接
- python - 在 python 中为大数据集绘制时间序列的正确白天格式是什么?
- mysql - MySQL Window 函数计算百分比
- javascript - 如何从由斜杠分隔的 url 中获取 url 参数,例如 http://myweb.com/example/12345/222/4444 我想从上面的 url 中获取 12345、222、4444
- java - tomcat 7 到 9 迁移:java.lang.IllegalArgumentException:指定的主资源集 [...] 无效
- javascript - 引导日期时间选择器未打开
- magento - magento 2.3 安装后黑屏
- python - 从 Music21 保存图像文件