查询具有多个具有相同名称和不同属性值的元素的XML文档
本文关键字:属性 XML 文档 元素 查询 | 更新日期: 2023-09-27 18:04:00
我有一个XML Document
,它有几个具有相同名称和不同属性值的元素,我正在查询从文档到数组的数据
foreach (var trade in doc.Descendants("Trd"))
{
var RptSide = trade.Element("RptSide");
sellerAccount = RptSide.Elements("Pty")
.Where(pty => pty.Attribute("Src").Value == "C")
.Select(pty => pty.Attribute("ID").Value)
.FirstOrDefault();
}
我的XML如下
<Trd>
<RptSide Side="1">
<Pty R="1" ID="666">
</Pty>
<Pty R="4" ID="666">
</Pty>
<Pty R="7" ID="ABC">
</Pty>
<Pty R="21" ID="CCC">
</Pty>
<Pty R="22" ID="NY">
</Pty>
**<Pty R="24" Src="C" ID="666ID">**
<Sub Typ="26" ID="1">
</Sub>
</Pty>
<Pty R="24" Src="H" ID="A-62370">
</Pty>
<Pty R="30" ID="apm">
</Pty>
<Pty R="36" ID="testausto">
<Sub Typ="9" ID="Addo Ace">
</Sub>
</Pty>
</RptSide>
</Trd>
从上面的XML中,我期待第五个Pty
元素的ID
,其中Attribute Src="C"
即666ID
将存储在sellerAccount
中,但它只考虑第一个Pty元素,其中没有Src
属性,可能是因为使用FirstOrDefault()
。
:
An unhandled exception of type 'System.NullReferenceException' occurred in TestXM.exe
Additional information: Object reference not set to an instance of an object.
但是当我把代码改为下面时,它就正常工作了
sellerAccount = RptSide.Elements("Pty")
.Where(pty => pty.Attribute("R").Value == "24")
.Select(pty => pty.Attribute("ID").Value)
.FirstOrDefault();
我可以知道查询文档寻找Src
属性的Pty
元素的正确方法吗?
您只需要在调用.Value
之前对Src
属性结果进行空检查,以避免NullReferenceException
。
var sellerAccount = RptSide.Elements("Pty")
.Where(pty => pty.Attribute("Src") != null && pty.Attribute("Src").Value.Equals("C"))
.Select(pty => pty.Attribute("ID").Value)
.FirstOrDefault();
或者,(带using System.Xml.XPath;
)
var sellerAccount = doc.XPathSelectElement("//*[@Src='C']").Attribute("ID").Value;