[英]How to parse child elements of XML-object with Linq
我正在嘗試解析此文檔。 這是其中的一部分:
<JobPortalPositionList>
<CustomerAlias>Frogn</CustomerAlias>
<CustomerName>Frogn kommune</CustomerName>
<TransactionStatus>
<Description>The operation completed successfully.</Description>
<StatusCode>Success</StatusCode>
</TransactionStatus>
<Items>
<JobPortalPosition>
<CustomerAlias>Frogn</CustomerAlias>
<CustomerName>Frogn kommune</CustomerName>
<TransactionStatus>
網址: http : //api.hr-manager.net/JobPortal.svc/frogn/positionlist/xml/
我對Linq的嘗試:
string uri="http://api.hr-manager.net/JobPortal.svc/frogn/positionlist/xml/";
XElement xmlJobTree = XElement.Load(uri);
var listOfJobpositions =
(from jobpositions in xmlJobTree.Elements("JobPortalPositionList")
.Elements("Items")
.Elements("JobPortalPosition")
select jobpositions).ToList();
我得到一個空名單。 我究竟做錯了什么?
您的代碼有兩個問題。 該文檔具有您的代碼未說明的名稱空間。
該文檔的根是:
<JobPortalPositionList xmlns="http://schemas.hr-manager.net/jobportal/1.0/"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
由於默認名稱空間是http://schemas.hr-manager.net/jobportal/1.0/
,因此您的查詢需要使用它們。
XNamespace ns = "http://schemas.hr-manager.net/jobportal/1.0/";
var listOfJobpositions =
(from jobpositions in xmlJobTree.Elements(ns + "JobPortalPositionList")
.Elements(ns + "Items")
.Elements(ns + "JobPortalPosition")
select jobpositions).ToList();
旁注,可以將其重寫為:
var listOfJobpositions =
xmlJobTree.Elements(ns + "JobPortalPositionList")
.Elements(ns + "Items")
.Elements(ns + "JobPortalPosition")
.ToList();
其次,您將文檔解析為XElement
。 因此,解析的元素xmlJobTree
將引用文檔的根節點,而不是文檔本身。 因此,查詢的第一部分是檢查JobPortalPositionList
是否是JobPortalPositionList
元素的元素。 這是絕對不可以,因此不會產生任何結果。
您應該始終將完整的XML文檔解析為XDocument
以免在這里造成混淆。 作為XDocument
,查詢將相對於文檔而不是根。 其他一切都將起作用。
var xmlJobTree = XDocument.Load(uri);
您可以執行以下操作:
var documents =
(from docs in documentRoot.Descendants("document")
select new
{
Id = (string) docs.Attribute("id"),
Sections = docs.Elements("section")
}).ToList();
foreach (var doc in documents)
{
foreach (var section in doc.Sections)
{
Console.WriteLine("SectionId: " + section.Attribute("id"));
foreach (var item in section.Elements("item"))
{
Console.WriteLine("ItemId: " + item.Attribute("id"));
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.