我有一个基本的ASPX页面:
<%@ Page Language="C#" MasterPageFile="SomeMasterPage.master" AutoEventWireup="true" %>
<h1>My ASPX Page</h1>
<div class="content">
<p>Some content goes here.</p>
</div>
使用HtmlAgilityPack,我希望从ASPX页面获取第一行并访问其属性(Language
,MasterPageFile
和AutoEventWireup
)。但是,当我尝试使用HtmlAgilityPack加载页面的HTML时,第一行将作为文本节点返回。
public static class Program
{
public static void Main(string[] args)
{
var parser = new Parser();
parser.Parse("some-page.aspx");
}
}
public class Parser
{
public void Parse(string path)
{
HtmlDocument document = new HtmlDocument();
document.Load(path);
HtmlNode childNode = document.DocumentNode.ChildNodes[0];
// childNode is an HtmlTextNode
}
}
我意识到开放的ASPX系列实际上并不是HTML,这很可能是HtmlAgilityPack将其作为文本节点返回的原因。现在,我可以使用此返回的文本手动解析属性中的值,但我宁愿将其视为标准HTML节点。有没有办法教HtmlAgilityPack将顶行视为HTML节点?
答案 0 :(得分:2)
我认为没有办法让HtmlAgilityPack
读取无效元素作为html元素。怎么样的小黑客:
//get the first line string
var firstNodeText = doc.DocumentNode.ChildNodes[0].InnerHtml;
//do simple string manipulation to change invalid element to become a valid html element
//in this example we change this : <%@ .... %> to become : <_asp .... />
HtmlNode firstNode = HtmlNode.CreateNode(firstNodeText.Replace("<%@", "<_asp").Replace("%>", "/>"));