C#中如何解析多个元素属性值
How to parse multiple element attribute values in 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);
我有以下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);