【问题标题】:Reading non-html content with AgilityPack使用 Agility Pack 读取非 html 内容
【发布时间】:2016-02-13 12:30:45
【问题描述】:

我们正在加载的服务之一是仅使用纯 JSON 对象进行响应。我们正在使用 html 敏捷包加载所有服务,除此之外。其他服务正在呈现一个脚本标签,其中包含一个 JSON,并且它按预期工作。但是当它以非 html 格式出现时,我无法加载这些数据。加载的文档没有元素,Text属性为空字符串,DocumentElement的outer/inner html抛出object null异常,innerText为空或null。

我尝试使用 HttpWebRequest 加载这项服务,它完成了这项工作,但我不想仅仅因为这项服务而混合技术。

是否可以使用 HtmlAgilityPack 加载纯 JSON 数据页面?

【问题讨论】:

  • 我不想解析对象,我想得到它。我正在使用 NewtonsoftJson 进行解析,这不是问题。
  • "由于 HTML Agility Pack 不评估 HTML 的任何内容,因此 javascript 代码应该被视为纯文本。使用 SelectSingleNode 方法找到一段 Javascript,然后直接抓取获取内容的 InnerHtml。"
  • 纯文本是我所需要的。一次又一次,我不想解析 json,我只需要获取它的纯文本源。 Json在应用程序的其他部分解析,我需要阅读非html源代码。当我到达我的电脑时,我会尝试使用 SelectSingleNode,但是 doc 的 childElements 集合是一个空数组,无论页面源中是否没有元素。对不起,我在手机上写:)

标签: c# html-agility-pack


【解决方案1】:

更新:

原来我误解了这个问题。

HAP 的核心功能是解析 HTML,而您的问题在于下载 HTML(或本例中的 JSON)。 HAP 的HtmlWeb 仅提供执行此任务的基本功能,因此一旦您发现自己处于HtmlWeb 不再工作的情况下,您很可能不得不切换到其他工具。这是这种情况的另一个例子:HTML Agility Pack settings


初步答案:

快速测试表明DocumentElement.InnerText 可以很好地返回 JSON:

var json = @"{
    identifier: '2051189775',     //PRODUCT ID
    fn: 'Fit- Whiskered Dark Wash Skirt',
    category: ['sale'],
    brand: 'Brand Name',
    price: '22.90',  // this would be the discount price
    amount: '31.80',  // this would be the original price
    currency: 'USD',
    //List can me even more.
};";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(json);

Console.WriteLine(doc.DocumentNode.InnerText);

现场演示:https://dotnetfiddle.net/nPT49L

如果这不适合您,请发布示例 JSON 数据来证明问题。

【讨论】:

  • 将字符串读取为 html 以获取字符串没有意义。我的目标是拥有那种刺痛感。试试 htmlWeb.Load("page.returns.json");
  • 谢谢你的链接,就是这样:)
猜你喜欢
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
相关资源
最近更新 更多