Error de montaje al utilizar HtmlAgilityPack

c# html-agility-pack reference windows-phone-8.1 xpath

Pregunta

Quiero crear una aplicación que tome algo de una página web y que se la muestre al usuario. Para hacer esto, utilicé HtmlAgilityPack. Agregué la referencia al proyecto (v. 1.4.6.0 de NuGet) y usé el código que un usuario publicó en otra pregunta hace algunos años.

            HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
            // There are various options, set as needed
            htmlDoc.OptionFixNestedTags = true;

            // filePath is a path to a file containing the html
            htmlDoc.Load(filePath);
            if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
            {
                // Handle any parse errors as required
            }
            else
            {
                if (htmlDoc.DocumentNode != null)
                {
                    HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");

                    if (bodyNode != null)
                    {
                        // Do something with bodyNode
                    }
                }
            }

Mi problema es que me sale el siguiente error:

El tipo 'System.Xml.XPath.IXPathNavigable' se define en un ensamblado al que no se hace referencia. Debe agregar una referencia al ensamblado 'System.Xml.XPath, Version = 2.0.5.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'.

Así que intenté agregar la referencia usando la siguiente dll:

c: \ Archivos de programa (x86) \ Microsoft SDKs \ Silverlight \ v5.0 \ Libraries \ Client \ System.Xml.XPath.dll

Pero esta vez recibo el siguiente error (lo traduje porque recibo un error italiano, por lo que puede que no sea la traducción correcta):

No es posible agregar una referencia a un ensamblado para el proyecto que no sea compatible o de una versión anterior

¿Que puedo hacer?

Respuesta popular

Parece que HtmlAgilityPack (HAP) para aplicaciones de la tienda de Windows Phone 8.1 no es compatible con XPath, similar a HAP para aplicaciones de la tienda de Windows 8 .

En este caso, puede utilizar la API LINQ de HAP en lugar de la API de XPath, por ejemplo:

......
if (htmlDoc.DocumentNode != null)
{
    HtmlAgilityPack.HtmlNode bodyNode = doc.DocumentNode
                                           .DescendantsAndSelf("body")
                                           .FirstOrDefault();
    if (bodyNode != null)
    {
        // Do something with bodyNode
    }
}
......

Incluso si realmente tiene el proyecto de aplicaciones Silverlight de Windows Phone, LINQ API sigue siendo una posible solución.



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué