使用LINQ从XDocument检索特定元素的列表



我已经尝试按照使用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");

相关内容

  • 没有找到相关文章

最新更新