簡體   English   中英

查詢具有多個具有相同名稱和不同屬性值的元素的XML文檔

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM