使用XPath和HtmlAgilityPack选择属性值

c# html html-agility-pack xml xpath

我试图使用html敏捷包中的xpath表达式获取元标记的第二个属性值:元标记:

<meta name="pubdate" content="2012-08-30" />

我正在使用的xml路径表达式:

<meta name="pubdate" content="2012-08-30" />

但它不会返回任何东西。我试图搜索并实现此解决方案:

<meta name="pubdate" content="2012-08-30" />

其他方式:

<meta name="pubdate" content="2012-08-30" />

但它在html敏捷包中提供了xml异常。另一种解决方案也不起作用。

<meta name="pubdate" content="2012-08-30" />

出于原因,我只想使用xml路径(而不是使用html agility pack函数来获取属性值)。我使用的功能如下:

<meta name="pubdate" content="2012-08-30" />

到目前为止,似乎没有办法使用xml路径表达式直接获取属性值。有任何想法吗?

一般承认的答案

有一种方法可以使用HtmlNodeNavigator

public static string TextfromOneNode(HtmlNode node, string xmlPath)
{
    string toReturn = "";
    var navigator = (HtmlAgilityPack.HtmlNodeNavigator)node.CreateNavigator();
    var result = navigator.SelectSingleNode(xmlPath);
    if(result != null)
    {
        toReturn = result.Value;
    }
    return toReturn;
}

以下控制台应用程序示例演示了HtmlNodeNavigator.SelectSingleNode()如何与返回元素的XPath和返回属性的XPath一起使用:

public static string TextfromOneNode(HtmlNode node, string xmlPath)
{
    string toReturn = "";
    var navigator = (HtmlAgilityPack.HtmlNodeNavigator)node.CreateNavigator();
    var result = navigator.SelectSingleNode(xmlPath);
    if(result != null)
    {
        toReturn = result.Value;
    }
    return toReturn;
}

dotnetfiddle演示

输出:

public static string TextfromOneNode(HtmlNode node, string xmlPath)
{
    string toReturn = "";
    var navigator = (HtmlAgilityPack.HtmlNodeNavigator)node.CreateNavigator();
    var result = navigator.SelectSingleNode(xmlPath);
    if(result != null)
    {
        toReturn = result.Value;
    }
    return toReturn;
}

热门答案

使用xml linq

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "<meta name=\"pubdate\" content=\"2012-08-30\" />";
            XElement meta = XElement.Parse(input);
            DateTime output = (DateTime)meta.Attribute("content");
        }
    }
}



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因