【问题标题】:Parsing ASP Elements with HtmlAgilityPack使用 HtmlAgilityPack 解析 ASP 元素
【发布时间】:2014-05-04 15:24:05
【问题描述】:

我有一个基本的 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 页面获取第一行并访问其属性(LanguageMasterPageFileAutoEventWireup)。但是,当我尝试使用 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 节点?

【问题讨论】:

    标签: c# asp.net parsing html-agility-pack


    【解决方案1】:

    我认为没有办法让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("%>", "/>"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 2016-11-20
      相关资源
      最近更新 更多