我有一项任务要做.我需要检索a tag或href特定的id(id基于用户输入).示例我有html这样的
<manifest>
<item href="Text/Cover.xhtml" id="Cov" media-type="application/xhtml+xml" />
<item href="Text/Back.xhtml" id="Back" media-type="application/xhtml+xml" />
</manifest>
Run Code Online (Sandbox Code Playgroud)
我已经有了这个代码.请帮我.谢谢
HtmlAgilityPack.HtmlDocument document2 = new
HtmlAgilityPack.HtmlDocument();
document2.Load(@"C:\try.html");
HtmlNode[] nodes = document2.DocumentNode.SelectNodes("//manifest").ToArray();
foreach (HtmlNode item in nodes)
{
Console.WriteLine(item.InnerHtml);
}
Run Code Online (Sandbox Code Playgroud) 我正在使用HtmlAgilityPack.我用以下字符串创建一个HtmlDocument和LoadHtml:
<select id="foo_Bar" name="foo.Bar"><option selected="selected" value="1">One</option><option value="2">Two</option></select>
Run Code Online (Sandbox Code Playgroud)
这有些意想不到的事情.首先,它给出了两个解析器错误,EndTagNotRequired.其次,select节点有4个子节点 - 两个用于选项标签,另外两个用于选项标签的内部文本.最后,OuterHtml是这样的:
<select id="foo_Bar" name="foo.Bar"><option selected="selected" value="1">One<option value="2">Two</select>
Run Code Online (Sandbox Code Playgroud)
所以基本上我决定放弃选项上的结束标记.让我们暂时搁置一下,这样做是否合适和可取.我正在使用HtmlAgilityPack来测试HTML生成代码,所以我不希望它为我做出任何决定或者给出任何错误,除非HTML确实是错误的.有没有办法让它表现得我想要的?我尝试为HtmlDocument设置一些选项,具体来说:
doc.OptionAutoCloseOnEnd = false;
doc.OptionCheckSyntax = false;
doc.OptionFixNestedTags = false;
Run Code Online (Sandbox Code Playgroud)
这不起作用.如果HtmlAgilityPack不能做我想做的事,你能推荐一些可以吗?
示例HTML:
<html><body>
<form id="form1">
<input name="foo1" value="bar1" />
<!-- Other elements -->
</form>
<form id="form2">
<input name="foo2" value="bar2" />
<!-- Other elements -->
</form>
</body></html>
Run Code Online (Sandbox Code Playgroud)
测试代码:
HtmlDocument doc = new HtmlDocument();
doc.Load(@"D:\test.html");
foreach (HtmlNode node in doc.GetElementbyId("form2").SelectNodes(".//input"))
{
Console.WriteLine(node.Attributes["value"].Value);
}
Run Code Online (Sandbox Code Playgroud)
该声明doc.GetElementbyId("form2").SelectNodes(".//input")给了我一个空引用.
我做错了什么?谢谢.
WebClient GodLikeClient = new WebClient();
HtmlAgilityPack.HtmlDocument GodLikeHTML = new HtmlAgilityPack.HtmlDocument();
GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt");
Run Code Online (Sandbox Code Playgroud)
所以这段代码返回:"Skaitytojo klausimas psichologui:kaslemiahomoseksualumÄ...? - NaujienųportalasAlfa.lt"而不是"Skaitytojo klausimas psichologui:kaslemiahomoseksualumą? - NaujienųportalasAlfa.lt".
这个网页编码在1257(波罗的海),但textBox1.Text = GodLikeHTML.DocumentNode.OuterHtml;返回扭曲的文本 - 波罗的海变音符被转换成一些奇怪的几个字符长字符串:(
是的,我已经尝试过HtmlAgilityPack论坛了.他们很糟糕.
PS我不是程序员,但是我在社区项目上工作,我真的需要让这段代码工作.谢谢 ;}
我刚刚发现了关于html敏捷包的问题,我试过了,但偶然发现了一个问题.我在网上找不到任何东西,所以我在这里尝试.
你知道如何从字符串而不是文档/ URL加载HTML吗?
谢谢.
我在这段代码中收到"路径中的非法字符"错误.我已经提到"Error Occuring Here"作为发生错误的行中的注释.
var document = htmlWeb.Load(searchUrl);
var hotels = document.DocumentNode.Descendants("div")
.Where(x => x.Attributes.Contains("class") &&
x.Attributes["class"].Value.Contains("listing-content"));
int count = 1;
foreach (var hotel in hotels)
{
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
htmlDoc.Load(hotel.InnerText); // Error Occuring Here //
if (htmlDoc.DocumentNode != null)
{
var hotelName = htmlDoc.DocumentNode.SelectNodes("//div[@class='business-container-inner']//div[@class='business-content clearfix']//div[@class='business-name-wrapper']//h3[@class='business-name fn org']//div[@class='srp-business-name']//a[0]");
foreach (var name in hotelName)
{
Console.WriteLine(name.InnerHtml);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我已经在.NET 4上编写了一个项目,目前我正在允许它在Windows Phone上运行.我正在使用HtmlAgilityPack,一个众所周知的库,允许Linq查询HTML,并且只使用它提供的LoadHtml和Linq接口.
将类库从.NET 4转换为支持.NET 4和WP8的PCL(可移植类库)后,我似乎无法再使用HtmlAgilityPack库了.有没有办法允许HtmlAgilityPack在PCL项目下正常运行,或者是否有一个类似的Linq接口的可变替代方案可以按预期工作?
编辑:HtmlAgilityPack提供9个不同的版本,其中没有一个与PCL兼容.它们都没有解析引用的依赖关系.对于某些版本,它可能看起来确实如此,但在使用时会出现错误,通常是"无法加载,未解析的依赖项".
编辑#2由于很容易错过一个小评论,我会用我提出的解决方案更新这个答案.我提取了基本功能所需的内容,并实现了缺少的组件以使一切正常.结果在这里https://github.com/Deathspike/HtmlAgilityPack-PCL
.net c# html-agility-pack portable-class-library windows-phone-8
我刚刚下载了HTMLAgilityPack,文档中没有任何示例.
我正在寻找一种从网站下载所有图像的方法.地址字符串,而不是物理图像.
<img src="blabalbalbal.jpeg" />
Run Code Online (Sandbox Code Playgroud)
我需要拉出每个img标签的来源.我只是想了解图书馆及其提供的内容.每个人都说这是这项工作的最佳工具.
编辑
public void GetAllImages()
{
WebClient x = new WebClient();
string source = x.DownloadString(@"http://www.google.com");
HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
document.Load(source);
//I can't use the Descendants method. It doesn't appear.
var ImageURLS = document.desc
.Select(e => e.GetAttributeValue("src", null))
.Where(s => !String.IsNullOrEmpty(s));
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试style使用HtmlAgilityPack创建一个代码段来删除所有属性而不管标记.
这是我的代码:
var elements = htmlDoc.DocumentNode.SelectNodes("//*");
if (elements!=null)
{
foreach (var element in elements)
{
element.Attributes.Remove("style");
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我没有坚持下去?如果我element立刻看了看对象Remove("style").我可以看到style属性已被删除,但它仍然出现在DocumentNode对象中.:/
我感觉有点傻,但它似乎对我来说?有人用HtmlAgilityPack做过这个吗?谢谢!
更新
我将我的代码更改为以下内容,并且它正常工作:
public static void RemoveStyleAttributes(this HtmlDocument html)
{
var elementsWithStyleAttribute = html.DocumentNode.SelectNodes("//@style");
if (elementsWithStyleAttribute!=null)
{
foreach (var element in elementsWithStyleAttribute)
{
element.Attributes["style"].Remove();
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将从HTML文件中提取的链接添加到CheckBoxList(cbl_items).
它到目前为止工作但不是链接,项目的名称显示为HtmlAgilityPack.HtmlNode.我尝试使用DocumentElement而不是Node它说它不存在或类似.
如何才能显示URL而不是HtmlAgilityPack.HtmlNode?
这是我到目前为止所尝试的:
HtmlWeb hw = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc = hw.Load(tb_url.Text);
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
cbl_items.Items.Add(link);
}
Run Code Online (Sandbox Code Playgroud)