我有一个HTML文档,我用XPath解析它。我想获得元素输入的值,但它不起作用。
我的Html:
<tbody>
<tr>
<td>
<input type="text" name="item" value="10743" readonly="readonly" size="10"/>
</td>
</tr>
</tbody>
我的代码:
using HtmlAgilityPack;
HtmlAgilityPack.HtmlDocument doc;
HtmlWeb hw = new HtmlWeb();
HtmlNodeCollection node = doc.DocumentNode.SelectNodes("//input/@value");
string s=node[0].InnerText;
所以我想获得价值:“10743”(我不介意另外给出答案的标签。)
答案 0 :(得分:14)
你可以在.Attributes
集合中获取它:
var doc = new HtmlAgilityPack.HtmlDocument();
doc.Load("file.html");
var node = doc.DocumentNode.SelectNodes("//input") [0];
var val = node.Attributes["value"].Value; //10743
答案 1 :(得分:7)
如果您使用HtmlNavigator
。
//Load document from some html string
HtmlDocument hdoc = new HtmlDocument();
hdoc.LoadHtml(htmlContent);
//load navigator for current document
HtmlNavigator navigator = (HtmlNodeNavigator)hdoc.CreateNavigator();
//Get value with given xpath
string xpath = "//input/@value";
string val = navigator.SelectSingleNode(xpath).Value;
答案 2 :(得分:6)
Update2 :以下是如何使用Html Agility Pack获取属性值的代码示例:
<强> 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");
您显然需要根据需要调整此代码 - 例如,您不会修改属性,而只会使用att.Value
。
更新:您也可以查看以下问题:
<强> Selecting attribute values with html Agility Pack 强>
您的问题很可能是默认命名空间问题 - 搜索“XPath默认命名空间c#”,您会发现许多好的解决方案(提示:使用 {{3}的重载有 SelectNodes()
参数。
以下代码显示了“no namespace”中文档中属性的内容:
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);
}
}
运行此应用的结果是:
Inner text: novel
InnerXml: novel
OuterXml: value="novel"
Value: novel
现在,对于默认命名空间中的文档:
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);
}
}
运行此应用再次生成想要的结果:
Inner text: novel
InnerXml: novel
OuterXml: value="novel"
Value: novel