У меня есть некоторый 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-пакет Agility Pack, который выглядитнаилучшее соответствие.
Однако, несмотря на просмотр [скудной] документации, я не могу заставить свой код работать.
Я ожидаю, что сработает следующее:
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);
Это просто вызывает исключение: "Namespace Manager или XsltContext необходимы. Этозапрос имеет префикс, переменную или пользовательскую функцию. "Я не могу найти способ добавить управление пространством имен к объекту HtmlDocument.
Чего мне здесь не хватает?Метод DescendantsOrSelf () работает, если используется «стандартный» тег HTML, такой как «p», но не тот, который у меня есть.Конечно, это должно работать?(Это нужно!)