J'ai quelques HTML, par exemple:Html Agility Paquet: DescendantsOrSelf() ne pas retourner l'élément 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>
Et je veux trouver toutes les instances des CxCMS: élément ContentManagedPlaceHolder. J'utilise HTML Agility Pack, qui semble le meilleur ajustement.
Cependant, malgré l'examen de la documentation [maigre], je n'arrive pas à faire fonctionner mon code.
je me attends à ce qui suit au travail:
string searchForElement = "CxCMS:ContentManagedPlaceHolder";
IEnumerable<HtmlNode> contentPlaceHolderHtmlNodes = HtmlDocument.DocumentNode.Descendants(searchForElement);
int count = contentPlaceHolderHtmlNodes.Count();
Mais je reçoivent rien en retour.
Si je change de DescendantsOrSelf, je reviens le nœud du document, "#document" - ce qui est incorrect:
string searchForElement = "CxCMS:ContentManagedPlaceHolder";
IEnumerable<HtmlNode> contentPlaceHolderHtmlNodes = HtmlDocument.DocumentNode.DescendantsOrSelf(searchForElement);
int count = contentPlaceHolderHtmlNodes.Count();
J'ai aussi essayé d'utiliser LINQ:
string searchForElement = "CxCMS:ContentManagedPlaceHolder";
IEnumerable<HtmlNode> contentPlaceHolderHtmlNodes = HtmlDocument.DocumentNode.DescendantsOrSelf().Where(q=>q.Name==searchForElement);
int count = contentPlaceHolderHtmlNodes.Count();
Comme aucun de ces méthodes de travail, je suis passé à l'aide de SelectNodes, à la place:
string searchForElement = "CxCMS:ContentManagedPlaceHolder";
string xPath="//"+searchForElement // "//CxCMS:ContentManagedPlaceHolder"
var nodes= HtmlDocument.DocumentNode.SelectNodes(xPath);
Cela vient de jeter l'exception: "Namespace Manager ou XsltContext nécessaire. Cette requête a un préfixe, une variable, ou une fonction définie par l'utilisateur. "Je ne trouve aucun moyen d'ajouter la gestion de l'espace de noms à l'objet HtmlDocument
Qu'est-ce qui me manque, ici? La méthode DescendantsOrSelf() fonctionne si en utilisant une balise HTML "standard", comme "p", mais pas celle que j'ai, ça devrait marcher? (Il faut!)
Oui, je travaille avec la source ASPX. Cela semble fonctionner dans les tests que j'ai fait jusqu'ici, après avoir trouvé la chose en minuscules! Merci. –