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