Reputation: 2131
I have tried following tutorials about retrieving particular elements from an XDocument using LINQ, but so far every time I attempt, I am shown a message that the search yielded no results. Here is what I have at the moment (I'm trying to make a list of all the "Widgets" found in the XDoc:
XDocument xdoc = XDocument.Parse(itemHtml);
var widgets = from XElement x in xdoc.Descendants("Widgets")
select x;
"itemHtml" is in String format.
Here's my XDoc
<PageData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="PB">
<IsMasterLayout>false</IsMasterLayout>
<masterID>0</masterID>
<pageID>32</pageID>
<languageID>1033</languageID>
<title>TestPage</title>
<Zones>
<DropZoneData>
<DropZoneID>DropZone1</DropZoneID>
<isMasterZone>false</isMasterZone>
<Columns>
<ColumnData>
<Guid>00000000-0000-0000-0000-000000000000</Guid>
<Display>true</Display>
<columnID>0</columnID>
<width>35</width>
<CssClass />
<CssFramework />
<unit>percent</unit>
</ColumnData>
<ColumnData>
<Guid>00000000-0000-0000-0000-000000000000</Guid>
<Display>true</Display>
<columnID>1</columnID>
<width>65</width>
<CssClass />
<CssFramework />
<unit>percent</unit>
</ColumnData>
</Columns>
</DropZoneData>
</Zones>
<Widgets>
<WidgetData>
<ID xmlns="PW">23</ID>
<ControlURL xmlns="PW">ContentBlock.ascx</ControlURL>
<ColumnID xmlns="PW">1</ColumnID>
<Order xmlns="PW">0</Order>
<Minimized xmlns="PW">false</Minimized>
<DropID>DropZone1</DropID>
<ColumnGuid>00000000-0000-0000-0000-000000000000</ColumnGuid>
<ChildColumns />
<KeyValues />
<Associations>
<ObjectData>
<ObjectId>33</ObjectId>
<ObjectType>Content</ObjectType>
<ObjectLanguage>1033</ObjectLanguage>
</ObjectData>
</Associations>
</WidgetData>
<WidgetData>
<ID xmlns="PW">32</ID>
<ControlURL xmlns="PW">ListSummary.ascx</ControlURL>
<ColumnID xmlns="PW">0</ColumnID>
<Order xmlns="PW">0</Order>
<Minimized xmlns="PW">false</Minimized>
<DropID>DropZone1</DropID>
<ColumnGuid>00000000-0000-0000-0000-000000000000</ColumnGuid>
<ChildColumns />
<KeyValues />
<Associations />
</WidgetData>
</Widgets>
</PageData>
Upvotes: 1
Views: 64
Reputation: 236318
You have default xml namespace defined xmlns="PB"
. Thus you need to use it when querying elements, because Widgets
is only local name of element - full name will be {PB}Widgets
:
XNamespace ns = "PB";
Or you can get default namespace of root:
XNamespace ns = xdoc.Root.GetDefaultNamespace();
And then use it to provide element name:
var widgets = from w in xdoc.Descendants(ns + "Widgets")
select w;
Or simply
var widgets = xdoc.Descendants(ns + "Widgets");
Upvotes: 1