0

大家好,我正在构建一个简单的 aspx 网页,它在字典中查找一个单词(获取带有查询字符串的 url),将结果注入占位符并通过从字典网站检索 css 文件来适当地格式化其内容。

显然我不知道如何解决第三点,事实上我已经尝试了多种方法,但似乎都没有奏效。

准确地说,我已成功检索到正确 css 文件的链接并将其注入页眉(尝试:Page_load、Page_Init 事件),查询结果被注入到 Button_click 事件处理程序的“结果面板”占位符中。

我还包含了我的 ASPX 标记,后跟相应的代码隐藏文件。这个项目使用 HtmlAgilityPack。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Multidictionary.Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <asp:PlaceHolder runat="server" id="hdr"></asp:PlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h3>
            Enter URL and get contents of the page</h3>
        <asp:textbox id="TextBoxURL" runat="server" height="20px" width="250px" text="http://www.vandale.nl/opzoeken?pattern=kat&lang=nn">
        </asp:textbox>
        <asp:button id="Button1" runat="server" text="Get Contents" onclick="Button1_Click" />
        <br />
        <asp:literal runat="server" id="resultpanel"></asp:literal>
    </div>
    </form>
</body>
</html>

背后的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.IO;
using HtmlAgilityPack;
using System.Web.UI.HtmlControls;

namespace Multidictionary
{
    public partial class Default : System.Web.UI.Page
    {
        private string dictionaryUrl = "http://www.vandale.nl";
        private IEnumerable<HtmlNode> csslink;

        protected void Page_Init(object sender, EventArgs e)
        {

        }
        protected void Page_Load(object sender, EventArgs e)
        {
            //your code
            string url = TextBoxURL.Text;
            var webGet = new HtmlWeb();
            var document = webGet.Load(url);
            csslink = (from el in document.DocumentNode.SelectNodes("//link[@type='text/css']")
                       where
                       (el.Attributes["rel"] != null) && ("stylesheet".Equals(el.Attributes["rel"].Value))
                       select el);
            if (csslink != null && csslink.Count() > 0)
            {
                HtmlLink cssLink = new HtmlLink();
                cssLink.Href = dictionaryUrl + csslink.FirstOrDefault().Attributes["href"].Value;//"path to CSS";
                cssLink.Attributes["type"] = "text/css";
                cssLink.Attributes["media"] = "all";
                hdr.Controls.Add(cssLink);
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string url = TextBoxURL.Text;
            var webGet = new HtmlWeb();
            var document = webGet.Load(url);
            var definitieDiv = from el in document.DocumentNode.Descendants()
                               where (el.Attributes["id"] != null) && ("content-area".Equals(el.Attributes["id"].Value))
                               select el;
            if (definitieDiv != null && definitieDiv.Count() > 0)
            {
                resultpanel.Text = definitieDiv.FirstOrDefault().OuterHtml;
            }

        }
    }
}

如果我的问题需要任何澄清,请随时与我联系。

4

1 回答 1

0

您是否在浏览器中检查过生成的 html?我期望样式表在 url 的域部分丢失。

于 2013-05-19T16:29:55.977 回答