我有一些HTML,例如:的Html敏捷包:DescendantsOrSelf()没有返回HTML元素
<%@ Page Title="About Us" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="ContentManagedTargetPage.aspx.cs" Inherits="xxx.ContentManagedTargetPage" %>
<%@ Register TagPrefix="CxCMS" Namespace="xxx.ContentManagement.ASPNET.UI" Assembly="xxx.ContentManagement.ASPNET" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h2>
Content Managed
</h2>
<p>
Put content here.
[<CxCMS:ContentManagedPlaceHolder Key="keyThingy" runat="server" />]
</p>
</asp:Content>
而且我想找到CxCMS的所有实例:ContentManagedPlaceHolder元素。
我使用HTML敏捷包,这似乎是最合适的。
但是,尽管看了[微软]文档,我无法让我的代码正常工作。
我希望下面的工作:
string searchForElement = "CxCMS:ContentManagedPlaceHolder";
IEnumerable<HtmlNode> contentPlaceHolderHtmlNodes = HtmlDocument.DocumentNode.Descendants(searchForElement);
int count = contentPlaceHolderHtmlNodes.Count();
但我得不到任何回报。
如果我改变DescendantsOrSelf,我得到的文档节点回来, “#document” - 这是不正确的:
string searchForElement = "CxCMS:ContentManagedPlaceHolder";
IEnumerable<HtmlNode> contentPlaceHolderHtmlNodes = HtmlDocument.DocumentNode.DescendantsOrSelf(searchForElement);
int count = contentPlaceHolderHtmlNodes.Count();
我也使用LINQ尝试:
string searchForElement = "CxCMS:ContentManagedPlaceHolder";
IEnumerable<HtmlNode> contentPlaceHolderHtmlNodes = HtmlDocument.DocumentNode.DescendantsOrSelf().Where(q=>q.Name==searchForElement);
int count = contentPlaceHolderHtmlNodes.Count();
由于这些都不方法的工作,我转移到使用SelectNodes,而不是:
string searchForElement = "CxCMS:ContentManagedPlaceHolder";
string xPath="//"+searchForElement // "//CxCMS:ContentManagedPlaceHolder"
var nodes= HtmlDocument.DocumentNode.SelectNodes(xPath);
这只是引发异常: “需要命名空间管理器或XsltContext。 “我找不到任何将名称空间管理添加到HtmlDocument对象的方法
我在这里错过了什么?DescendantsOrSelf()方法在if使用“标准”HTML标签,如“p”,但不是我所拥有的,当然它应该工作吗?(它需要!)
是的,我正在使用ASPX源码。它似乎在我迄今为止所做的测试中发挥作用,在将小写字母的东西写出来之后!谢谢。 – 2010-06-16 18:56:07