2016-03-25 14 views
1

Sorunun ima ettiği gibi, bir dizeyi HtmlAgilityPack DocumentNode yolu olarak kullanmaya çalışıyorum. Kodu çalıştırdığımda diyor ki; Yoldaki yasadışı karakterler.Bir dizeyi HtmlAgilityPack Belge yolu olarak nasıl kullanılır?

Kodum:

Sınıf:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using HtmlAgilityPack; 
using System.IO; 
using System.Dynamic; 

namespace Class_xlAccountSCRead_ClassBuild 
{ 
    public class xlAccount_SCProcess 
    { 
     public static string ascDir { get; set; } 
     public static string ascFav { get; set; } 
     public static string accountSourceCodeDir; 

     public static void ascRead() 
     { 
      HtmlAgilityPack.HtmlDocument docc = new HtmlAgilityPack.HtmlDocument(); 
      HtmlDocument doc = new HtmlDocument(); 
      doc.Load(ascDir); 
      ascFav = doc.DocumentNode.SelectNodes("//*[@id=\"favoritesContent\"]/div[2]/div[2]/ul")[0].InnerHtml; 


     } 

    } 


} 

Form:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.IO; 
using System.Dynamic; 
using HtmlAgilityPack; 

namespace xlAccountSCRead_ClassBuild 
{ 
    public partial class Form1 : Form 
    { 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void button1_Click(object sender, EventArgs e) 
     { 

      Class_xlAccountSCRead_ClassBuild.xlAccount_SCProcess.ascDir = "@" + "\"" + textBox1.Text + "\""; 

      //await Task.Delay(100); 
      Class_xlAccountSCRead_ClassBuild.xlAccount_SCProcess.ascRead(); 

      textBox2.Text = Class_xlAccountSCRead_ClassBuild.xlAccount_SCProcess.ascFav; 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      Class_xlAccountSCRead_ClassBuild.xlAccount_SCProcess.ascDir = "@" + "\"" + textBox1.Text + "\""; 

      label1.Text = Class_xlAccountSCRead_ClassBuild.xlAccount_SCProcess.ascDir; 
     } 
    } 
} 

süreç ad Class_xlAccountSCRead_ClassBuild içinde ascRead tarafından yürütülmektedir. Böyle, C# dize kullanarak yapacağını şekilde dize oluşturmaya çalışıyorsanız gibi

+0

Size * DocumentNode yoluna göre demek ne olduğu açık değildir *. "Doc.Load (ascDir);" satırında atılan "Geçersiz karakterler" hatası mı? Eğer öyleyse, hatanın oluştuğu zamanda 'ascDir' tam değerini gönderir misiniz? – har07

+1

@ har07 OP açık bir şekilde değerin sonunda eğik çizgi eklediğinden, hata oldukça bekleniyor ... Bunun nasıl düzeltileceğine pek emin değilim. –

+0

@AlexeiLevenkov Haklı olduğunu düşündüm. Basit test kodunu çalıştırarak onaylamayı denedim, ancak '\' bir yolun sonunda 'DirectoryNotFoundException' yerine bunun tetiklendiğini ortaya çıkardım. Dahası, bu OP eklemiyor (Eminim bunu biliyorsun). Neyse, yorumunuz beni aşağıdaki cevaba götürür. Teşekkürler – har07

cevap

1

görünüyor:

string cs_literal = @"the_actual_path_goes_here"; 

Bildirimi burada kodunuzu ...

string your_string = "@" + "\"" + textBox1.Text + "\""; 

... yerine değişmez bu C# dize eşdeğer üretecek:

string cs_literal = "@\"the_actual_path_goes_here\""; 

, tırnak söyledikten p yasadışı Bu nedenle, "yoldaki yasa dışı karakterler" istisnası. Aslında, buradaki tüm çıkışlara ihtiyacınız yok çünkü C# kodunda yazdığınız dizgi değişmezi değil. olduğu gibi sadece TextBoxgelen dize pass:

string your_string = textBox1.Text; 
+0

Teşekkürler adam (veya gal), öneriniz benim sorunum düzeltildi. Bunu denemem için bana inanmadım. –

İlgili konular