[英]Querying an XML document which has multiple elements with same name and with different attribute values
我有一個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
但是它僅考慮其中沒有Src
屬性的第一個Pty元素,可能是因為使用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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.