我已经尝试按照使用LINQ从XDocument中检索特定元素的教程进行操作,但是到目前为止,每次尝试时都显示一条消息,表示搜索没有产生结果。以下是我目前所拥有的(我试图列出所有在XDoc中找到的"Widgets":
XDocument xdoc = XDocument.Parse(itemHtml);
var widgets = from XElement x in xdoc.Descendants("Widgets")
select x;
"itemHtml"是字符串格式。
这是我的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>
您已经定义了默认的xml命名空间xmlns="PB"
。因此,您需要在查询元素时使用它,因为Widgets
只是元素的本地名称-全名将是{PB}Widgets
:
XNamespace ns = "PB";
或者您可以获得root的默认命名空间:
XNamespace ns = xdoc.Root.GetDefaultNamespace();
然后使用它来提供元素名称:
var widgets = from w in xdoc.Descendants(ns + "Widgets")
select w;
或
var widgets = xdoc.Descendants(ns + "Widgets");