Sélection de la valeur d'attribut à l'aide de XPath et HtmlAgilityPack

c# html html-agility-pack xml xpath

Question

J'essaie d'obtenir la deuxième valeur d'attribut d'une balise meta à l'aide d'une expression xpath dans le pack d'agilité HTML: la balise méta:

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

L'expression de chemin XML que j'utilise:

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

Mais ça ne retourne rien. J'ai essayé de rechercher et d'implémenter cette solution:

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

Autrement:

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

Mais il donne une exception XML dans le pack d'agilité HTML. Une autre solution ne fonctionnait pas aussi bien.

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

Pour des raisons que je voulais utiliser uniquement le chemin XML (et non les fonctions de pack d'agilité HTML pour obtenir la valeur d'attribut). La fonction que j'utilise est ci-dessous:

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

Jusqu'ici, il semble qu'il n'y ait aucun moyen d'utiliser l'expression de chemin XML pour obtenir directement une valeur d'attribut. Des idées?

Réponse acceptée

Il y a un moyen d'utiliser 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;
}

L'exemple d'application suivant de la console illustre le fonctionnement de HtmlNodeNavigator.SelectSingleNode() avec XPath cet élément renvoyé et l'attribut XPath HtmlNodeNavigator.SelectSingleNode() :

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;
}

démo dotnetfiddle

sortie:

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;
}

Réponse populaire

Utiliser 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");
        }
    }
}



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi