标签: html-agility-pack

xpath搜索id包含特定文本的div

在我的HTML页面上,我有四十个div,但我只想要一个div

使用敏捷包来搜索并获取所有带有ID的div我使用它

"//div[@id]"
Run Code Online (Sandbox Code Playgroud)

但是我如何搜索带有ID的div,其中id包含文本"test"

<div id="outerdivtest1></div>"
Run Code Online (Sandbox Code Playgroud)

谢谢

xpath html-agility-pack

35
推荐指数
1
解决办法
4万
查看次数

使用正确的换行符将HTML转换(渲染)为Text

我需要将HTML字符串转换为纯文本(最好使用HTML Agility包).适当的白色空间,特别是正确的换行符.

通过"正确的换行符"我的意思是这段代码:

<div>
    <div>
        <div>
            line1
        </div>
    </div>
</div>
<div>line2</div>
Run Code Online (Sandbox Code Playgroud)

应转换为

line1
line2
Run Code Online (Sandbox Code Playgroud)

只有一个换行符.

我见过的大多数解决方案只是简单地将所有<div> <br> <p>标签转换为\ns*cks.

有关C#的html到plaintext渲染逻辑的任何建议吗?不完整的代码,至少常见的逻辑答案,如"用换行符替换所有关闭的DIV,但只有当下一个兄弟也不是DIV"时才真正有用.

我试过的事情:简单地获取.InnerText属性(显然是错误的),正则表达式(缓慢,痛苦,大量黑客,还有正则表达式比HtmlAgilityPack慢12倍 - 我测量了它),此解决方案和类似(返回更多换行符然后需要)

c# html-agility-pack

35
推荐指数
2
解决办法
1万
查看次数

HtmlAgilityPack - 出于某种原因,<form>会自行关闭吗?

我刚写了这个测试,看看我是不是疯了......

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HtmlAgilityPack;

namespace HtmlAgilityPackFormBug
{
    class Program
    {
        static void Main(string[] args)
        {
            var doc = new HtmlDocument();
            doc.LoadHtml(@"
<!DOCTYPE html>
<html>
    <head>
        <title>Form Test</title>
    </head>
    <body>
        <form>
            <input type=""text"" />
            <input type=""reset"" />
            <input type=""submit"" />
        </form>
    </body>
</html>
");
            var body = doc.DocumentNode.SelectSingleNode("//body");
            foreach (var node in body.ChildNodes.Where(n => n.NodeType == HtmlNodeType.Element))
                Console.WriteLine(node.XPath);
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它输出:

/html[1]/body[1]/form[1]
/html[1]/body[1]/input[1]
/html[1]/body[1]/input[2]
/html[1]/body[1]/input[3]
Run Code Online (Sandbox Code Playgroud)

但是,如果我改变<form><xxx>它给了我:

/html[1]/body[1]/xxx[1]
Run Code Online (Sandbox Code Playgroud)

(正如它应该).所以...看起来那些输入元素 …

c# html-agility-pack

34
推荐指数
2
解决办法
5004
查看次数

使用HtmlAgilityPack解析HTML页面

使用C#我想知道如何从这个示例html脚本获取Textbox值(即:john):

<TD class=texte width="50%">
<DIV align=right>Name :<B> </B></DIV></TD>
<TD width="50%"><INPUT class=box value=John maxLength=16 size=16 name=user_name> </TD>
<TR vAlign=center>
Run Code Online (Sandbox Code Playgroud)

html c# html-agility-pack

31
推荐指数
1
解决办法
4万
查看次数

HTML Agility Pack strip标签不在白名单中

我正在尝试创建一个删除不在白名单中的html标签和属性的函数.我有以下HTML:

<b>first text </b>
<b>second text here
       <a>some text here</a>
 <a>some text here</a>

 </b>
<a>some twxt here</a>
Run Code Online (Sandbox Code Playgroud)

我正在使用HTML敏捷包,到目前为止我的代码是:

static List<string> WhiteNodeList = new List<string> { "b" };
static List<string> WhiteAttrList = new List<string> { };
static HtmlNode htmlNode;
public static void RemoveNotInWhiteList(out string _output, HtmlNode pNode, List<string> pWhiteList, List<string> attrWhiteList)
{

 // remove all attributes not on white list
 foreach (var item in pNode.ChildNodes)
 {
  item.Attributes.Where(u => attrWhiteList.Contains(u.Name) == false).ToList().ForEach(u => RemoveAttribute(u));

 }

 // remove all html and their innerText …
Run Code Online (Sandbox Code Playgroud)

c# tags sanitize html-parsing html-agility-pack

30
推荐指数
2
解决办法
2万
查看次数

Html敏捷包.加载和抓取网页

这是抓取时获取网页的最佳方式吗?

HttpWebRequest oReq = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)oReq.GetResponse();

var doc = new HtmlAgilityPack.HtmlDocument();

doc.Load(resp.GetResponseStream());
var element = doc.GetElementbyId("//start-left");
var element2 = doc.DocumentNode.SelectSingleNode("//body");
string html = doc.DocumentNode.OuterHtml;
Run Code Online (Sandbox Code Playgroud)

我已经看到HtmlWeb().Load了一个网页.这是一个更好的替代加载和刮网页?


好的,我会试试.

HtmlDocument doc = web.Load(url);
Run Code Online (Sandbox Code Playgroud)

现在,当我得到我的doc,并没有得到如此mutch属性.没有人喜欢SelectSingleNode.我唯一可以使用的是GetElementById,但这有效但我想上课.

我需要这样做吗?

var htmlBody = doc.DocumentNode.SelectSingleNode("//body");
htmlBody.SelectSingleNode("//paging");
Run Code Online (Sandbox Code Playgroud)

c# web-scraping html-agility-pack

30
推荐指数
1
解决办法
4万
查看次数

使用Html Agility Pack从html中获取所有文本

输入

<html><body><p>foo <a href='http://www.example.com'>bar</a> baz</p></body></html>
Run Code Online (Sandbox Code Playgroud)

产量

foo
bar
baz
Run Code Online (Sandbox Code Playgroud)

我知道htmldoc.DocumentNode.InnerText,但它会给foobarbaz- 我想得到每个文本,而不是一次.

c# html-agility-pack

28
推荐指数
5
解决办法
4万
查看次数

Html Agility Pack - 问题选择子节点

我想将我的Asics运行计划导出到iCal,由于Asics不提供这项服务,我决定为自己个人使用构建一个小刮刀.我想要做的是从我的计划中获取所有计划的运行并基于此生成iCal源.我正在使用C#和Html Agility Pack.

我想要做的是遍历我所有的预定运行(它们是div节点).然后我想用我的运行节点选择几个不同的节点.我的代码看起来像这样:

foreach (var run in doc.DocumentNode.SelectSingleNode("//div[@id='scheduleTable']").SelectNodes("//div[@class='pTdBox']"))
{
    number++;
    string date = run.SelectSingleNode("//div[@class='date']").InnerText;
    string type = run.SelectSingleNode("//span[@class='menu']").InnerHtml;
    string distance = run.SelectSingleNode("//span[@class='distance']").InnerHtml;
    string description = run.SelectSingleNode("//div[@class='description']").InnerHtml;
    ViewData["result"] += "Dato: " + date + "<br />";
    ViewData["result"] += "Tyep: " + type + "<br />";
    ViewData["result"] += "Distance: " + distance + "<br />";
    ViewData["result"] += "Description: " + description + "<br />";
    ViewData["result"] += run.InnerHtml.Replace("<", "&lt;").Replace(">", "&gt;") + "<br />" + "<br />" + "<br />";
}
Run Code Online (Sandbox Code Playgroud)

我的问题是run.SelectSingleNode("//div[@class='date']").InnerText …

c# asp.net-mvc html-agility-pack

27
推荐指数
1
解决办法
1万
查看次数

HtmlAgilityPack设置节点InnerText

我想用另一个文本替换HTML标签的内部文本.我正在使用HtmlAgilityPack
我使用此代码来提取所有文本

HtmlDocument doc = new HtmlDocument();
doc.Load("some path")

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//text()[normalize-space(.) != '']")) {
    // How to replace node.InnerText with some text ?
}
Run Code Online (Sandbox Code Playgroud)

但是InnerText是只读的.如何用其他文本替换文本并将其保存到文件?

c# parsing html-parsing html-agility-pack

27
推荐指数
3
解决办法
2万
查看次数

属性值中的XPath通配符

我有以下XPath来匹配类span的属性:

//span[@class='amount']
Run Code Online (Sandbox Code Playgroud)

我想匹配class属性为"amount"的所有元素,但也可能有其他类.我以为我能做到这一点:

//span[@class='*amount*'] 
Run Code Online (Sandbox Code Playgroud)

但这不起作用......我怎么能这样做?

c# xpath html-agility-pack

27
推荐指数
2
解决办法
2万
查看次数