私はいくつかの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要素のすべてのインスタンスを検索したいと思います。
私はHTMLAgilityPackを使用しています。これが最適と思われます。
ただし、[meagre]のドキュメントを見ても、コードを機能させることができません。
私は以下が機能することを期待します:
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()メソッドは、「p」などの「標準」HTMLタグを使用している場合は機能しますが、私が持っているものは機能しません。確かにそれはうまくいくはずですか?(する必要があります!)