簡體   English   中英

如何使用LINQ查詢XML文檔?

[英]How to query an XML document with LINQ?

可以說我有以下XML文檔:

<response>
   <businessEntity>
      <ABN>
         <identifierValue></identifierValue> 
         <isCurrentIndicator></isCurrentIndicator> 
         <replacedIdentifierValue xsi:nil="true" /> 
         <replacedFrom></replacedFrom> 
      </ABN>
      <entityStatus>
         <entityStatusCode> </entityStatusCode> 
         <effectiveFrom></effectiveFrom> 
         <effectiveTo></effectiveTo> 
      </entityStatus>
      <entityType>
         <entityTypeCode> </entityTypeCode> 
         <entityDescription> </entityDescription> 
      </entityType>
      <goodsAndServicesTax>
          <effectiveFrom></effectiveFrom> 
          <effectiveTo></effectiveTo> 
      </goodsAndServicesTax>
      <legalName>
          <givenName> </givenName> 
          <otherGivenName /> 
          <familyName> </familyName> 
          <effectiveFrom></effectiveFrom> 
          <effectiveTo></effectiveTo> 
      </legalName>
      <mainBusinessPhysicalAddress>
          <stateCode> </stateCode> 
          <postcode></postcode> 
          <effectiveFrom></effectiveFrom> 
          <effectiveTo></effectiveTo> 
      </mainBusinessPhysicalAddress>
   </businessEntity>
</response>

例如,如果我想獲取給定名稱和家庭名稱,則可以執行以下操作:

var businesses = doc.Descendants(ns + "businessEntity")
             .Elements(ns + "legalName")
             .Select(node => new
             {
                 effectiveFrom = node.Element(ns + "effectiveFrom").Value,
                 givenName = node.Element(ns + "givenName").Value,
                 familyName = node.Element(ns + "familyName").Value,
             }).ToList();

然后我可以訪問並填充表,但是我不確定如何查詢整個文檔並獲取所需的所有節點,例如ABN和entityType。 我是否需要創建一個列表並將每個兄弟的部分代碼復制到legalName?

提前致謝。

如果您可以假設每個子元素僅出現一次,則可以嘗試以下方法:

var businesses = (
    from node in doc.Descendants(ns + "businessEntity")
    let legalName = node.Element(ns + "legalName")
    let abn = node.Element(ns + "ABN")
    // etc...
    select new
    {
        LegalName = new
        {
            EffectiveFrom = (string)legalName.Element(ns + "effectiveFrom"),
            GivenName = (string)legalName.Element(ns + "givenName"),
            FamilyName = (string)legalName.Element(ns + "familyName"),
        },
        Abn = new
        {
            IdentifierValue = (string)abn.Element(ns + "identifierValue"),
            IsCurrentIndicator = (string)abn.Element(ns + "isCurrentIndicator"),
            ReplacedFrom = (string)abn.Element(ns + "replacedFrom"),
        },
        // etc...
    }).ToList();


Console.WriteLine(businesses[0].LegalName.GivenName);
Console.WriteLine(businesses[0].Abn.IsCurrentIndicator);

如果要在解析XML的方法之外使用此數據,則可能還需要考慮使用具體類型而不是匿名類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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