Error passing URL as parameter... Joeblogs & Htmlagilitypack

Asked

Viewed 554 times

13

Main

namespace ReaderXML
{
    class Program
    {
        static void Main(string[] args)
        {
            var website = LeitorDeXML("http://SITE ORIGEM/").ToArray();
            var total = website.Count();
            for (int i = 1; i < total; i++)
            {
                Postagem(website[i]);
            }
        }

Method for blog posting

    private static void Postagem(string website)
        {
            try
            {
                //LINK,USER,SENHA WP
                string link = "http://SITE NOVO";
                string username = "user wp";
                string password = "senha wp";

                //Leitura do HTML
                HtmlWeb web = new HtmlWeb();
                HtmlDocument resultat = web.Load(website);

                //Separar TITULO e CONTEUDO
                string titulopost = resultat.DocumentNode.SelectNodes("//*[contains(@class,'entry-title')]")[0].InnerHtml;
                string conteudo = resultat.DocumentNode.SelectNodes("//*[contains(@class,'entry-content')]")[0].InnerHtml; //ERRO AQUI

                //Entrada no wp
                var wp = new WordPressWrapper(link + "/xmlrpc.php", username, password);
                var post = new Post();

                //Categoria -- Não está funcionando ainda a parte da criação da categoria

                int website_corpo = 25;
                string categoria = website.Substring(website_corpo);
                int indexof_barra = categoria.IndexOf("/");
                int comeco_cat = 0;
                string categoria_f = categoria.Substring(comeco_cat, indexof_barra);

                //Data

                post.DateCreated = DateTime.Today.AddHours(0);

                //Postagem
                post.Title = titulopost;
                post.Body = conteudo;

                wp.NewPost(post, true);
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: {0}", e);
                Console.ReadKey();
            }
        }
    }
}

The "Leitordexml" method reads a sitemap declared in MAIN and returns the last urls.

The problem is that when I pass this url as parameter, when it takes the "string content" it does not pass from there.

From the following error:

Error: System.Nullreferenceexception: Object Reference not set to an instance of an Object

  • 1

    You can post the code of the Leitordexml method

  • You are trying to access a property of an object that has not been defined, or is null.

5 answers

1

You are loading the html in this row below, to simulate the problem, you would need the contents of the variable "website". HtmlDocument resultat = web.Load(website);

Anyway, it seems that the xpath passed below does not find the element in HTML and you are trying to access the first index string conteudo = resultat.DocumentNode.SelectNodes("//*[contains(@class,'entry-content')]")[0].InnerHtml;

You can confirm if xpath did not find anything with this code int totalEntryContent = resultat.DocumentNode.SelectNodes("//*[contains(@class,'entry-content')]").Count;

If you want help solving xpath, share the contents of the website variable.

0

I may be talking nonsense, but try putting ex:

var website = LeitorDeXML(new Uri("http://SITE ORIGEM/")).ToArray();

0

Before making the request the parameter must be encoded in Base64. When obtaining the request parameter do the Decode of the parameter with Base64 also.

0

The line of code

string conteudo = resultat.DocumentNode.SelectNodes("//*[contains(@class,'entry-content')]")[0].InnerHtml; 

apparently you can’t find the div entry-content on the page. Make sure this div actually exists on the page. If it doesn’t exist, then that’s why she’s not being found.

However, if the div entry-content actually exists, then the problem is in the code that selects that div.

Try to locate the div in the form indicated below, with Int. It searches the page for a div whose class attribute contains "entry-content":

var conteudo = resultat.DocumentNode.Descendants("div").Where(d => d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("entry-content") )[0].InnerHtml;

0

I don’t know exactly what code you’re using to read the xml, but you can use the System.Xml library to do this quickly:

String URLString = " http://seu.site.com/SiteMap.xml";
XmlTextReader reader = new XmlTextReader (URLString);

Read more about this solution on PROCEDURES: Read XML data in a URL using Visual C# . NET

Browser other questions tagged

You are not signed in. Login or sign up in order to post.