Update2: Dưới đây là ví dụ về cách lấy giá trị thuộc tính bằng Gói nhanh Agml:
http://htmlagilitypack.codeplex.com/wikipage?title=Examples
HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
{
HtmlAttribute att = link.Attributes["href"];
att.Value = FixLink(att);
}
doc.Save("file.htm");
Bạn rõ ràng là cần phải thích ứng với mã này với nhu cầu của bạn - ví dụ, bạn sẽ không sửa đổi các thuộc tính, nhưng sẽ chỉ sử dụng att.Value
.
Cập nhật: Bạn cũng có thể xem xét câu hỏi này:
Selecting attribute values with html Agility Pack
Vấn đề của bạn rất có thể là một vấn đề không gian tên mặc định - tìm kiếm cho "XPath không gian tên mặc định C# "và bạn sẽ tìm thấy nhiều giải pháp tốt (gợi ý: sử dụng quá tải của SelectNodes()
có một đối số XmlNamespaceManager
).
Các mã sau đây cho thấy những gì một được cho một thuộc tính trong một tài liệu "không gian tên":
using System;
using System.IO;
using System.Xml;
public class Sample
{
public static void Main()
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("<input value='novel' ISBN='1-861001-57-5'>" +
"<title>Pride And Prejudice</title>" +
"</input>");
XmlNode root = doc.DocumentElement;
XmlNode value = doc.SelectNodes("//input/@value")[0];
Console.WriteLine("Inner text: " + value.InnerText);
Console.WriteLine("InnerXml: " + value.InnerXml);
Console.WriteLine("OuterXml: " + value.OuterXml);
Console.WriteLine("Value: " + value.Value);
}
}
Kết quả từ chạy ứng dụng này là:
Inner text: novel
InnerXml: novel
OuterXml: value="novel"
Value: novel
Bây giờ, đối với tài liệu có trong không gian tên mặc định:
using System;
using System.IO;
using System.Xml;
public class Sample
{
public static void Main()
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("<input xmlns='some:Namespace' value='novel' ISBN='1-861001-57-5'>" +
"<title>Pride And Prejudice</title>" +
"</input>");
XmlNode root = doc.DocumentElement;
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("x", "some:Namespace");
XmlNode value = doc.SelectNodes("//x:input/@value", nsmgr)[0];
Console.WriteLine("Inner text: " + value.InnerText);
Console.WriteLine("InnerXml: " + value.InnerXml);
Console.WriteLine("OuterXml: " + value.OuterXml);
Console.WriteLine("Value: " + value.Value);
}
}
Chạy ứng dụng này tạo ra một lần nữa kết quả truy nã:
Inner text: novel
InnerXml: novel
OuterXml: value="novel"
Value: novel
Bạn đã thử 'node [0] .Value'? – Oded
Không, bởi vì tôi muốn nhận giá trị bằng nút '[0] .InnerText' –
Nhưng một thuộc tính không có' InnerText'. – Oded