2013-09-16 3 views
-1

Я новичок в VB 2008.net, что я хочу сделать, это извлечь некоторые элементы из приведенного ниже HTMLэкстракт HTML атрибуты элемента

<TABLE> 
    <TR> 
    <TD></TD> 
    <TH scope="col">PAT. NO.</TH><TD></TD><TH scope="col">Title</TH> 
    </TR> 
    <TR> 
    <TD valign=top> 
     10 
    </TD> 
    <TD valign=top> 
     <A HREF=/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.htm&r=10&p=1&f=G&l=50&d=PTXT&S1=*a&OS=*a&RS=*a>8,519,110</A> 
    </TD> 
    <TD valign=baseline> 
     <IMG border=0 src="/netaicon/PTO/ftext.gif" alt="Full-Text"> 
    </TD> 
    <TD valign=top> 
     <A HREF=/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.htm&r=10&p=1&f=G&l=50&d=PTXT&S1=*a&OS=*a&RS=*a>mRNA cap analogs</A> 
    </TD> 

поэтому я хочу, чтобы мой текстовое поле показать ниже

/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.htm&r=10&p=1&f=G&l=50&d=PTXT&S1=*a&OS=*a&RS=*a 

8,519,110 

mRNA cap analogs 

вышеупомянутый тег html повторяется, чтобы иметь больше строк таблицы и хочу получить все из них, я прочитал, что мы можем использовать «GetAttribute» для получения элемента html, но я хочу извлечь определенные части, как указано выше.

+0

Возможно, вы захотите изучить HtmlAgilityPack. –

ответ

1

Я рутина я использую для извлечения данных из HTML-таблиц (Извините, не кредитует оригинальный автор, я нашел этот код и не знаю откуда он пришел). Он анализирует HTML в строке для таблиц и загружает ячейки в набор данных.

Public Shared Function ConvertHtmlTablesToDataSet(html As String) As DataSet 
    Dim dt As DataTable 
    Dim ds As New DataSet() 
    dt = New DataTable() 
    Dim tableExpression As String = "<table[^>]*>(.*?)</table>" 
    Dim headerExpression As String = "<th[^>]*>(.*?)</th>" 
    Dim rowExpression As String = "<tr[^>]*>(.*?)</tr>" 
    Dim columnExpression As String = "<td[^>]*>(.*?)</td>" 
    Dim headersExist As Boolean = False 
    Dim iCurrentColumn As Integer = 0 
    Dim iCurrentRow As Integer = 0 

    Dim tables As MatchCollection = Regex.Matches(html, tableExpression, RegexOptions.Singleline Or RegexOptions.Multiline Or RegexOptions.IgnoreCase) 


    For Each table As Match In tables 
     iCurrentRow = 0 
     headersExist = False 
     dt = New DataTable() 

     If table.Value.Contains("<th") Then 
      headersExist = True 

      Dim headers As MatchCollection = Regex.Matches(table.Value, headerExpression, RegexOptions.Singleline Or RegexOptions.Multiline Or RegexOptions.IgnoreCase) 

      For Each header As Match In headers 
       dt.Columns.Add(header.Groups(1).ToString()) 
      Next 
     Else 

      Dim myvar2222 As Integer = Regex.Matches(Regex.Matches(Regex.Matches(table.Value, tableExpression, RegexOptions.Singleline Or RegexOptions.Multiline Or RegexOptions.IgnoreCase)(0).ToString(), rowExpression, RegexOptions.Singleline Or RegexOptions.Multiline Or RegexOptions.IgnoreCase)(0).ToString(), columnExpression, RegexOptions.Singleline Or RegexOptions.Multiline Or RegexOptions.IgnoreCase).Count 

      For iColumns As Integer = 1 To myvar2222 
       dt.Columns.Add("Column " + System.Convert.ToString(iColumns)) 

      Next 
     End If 

     Dim rows As MatchCollection = Regex.Matches(table.Value, rowExpression, RegexOptions.Singleline Or RegexOptions.Multiline Or RegexOptions.IgnoreCase) 
     Try 

      For Each row As Match In rows 
       If Not ((iCurrentRow = 0) And headersExist) Then 
        Dim dr As DataRow = dt.NewRow() 
        iCurrentColumn = 0 

        Dim columns As MatchCollection = Regex.Matches(row.Value, columnExpression, RegexOptions.Singleline Or RegexOptions.Multiline Or RegexOptions.IgnoreCase) 

        For Each column As Match In columns 
         dr(iCurrentColumn) = column.Groups(1).ToString() 
         iCurrentColumn += 1 
         If iCurrentColumn = dt.Columns.Count Then Exit For 
        Next 

        dt.Rows.Add(dr) 
       End If 
       iCurrentRow += 1 
      Next 

      ds.Tables.Add(dt) 
     Catch ex As Exception 
      Stop 
     End Try 
    Next 

    Return ds 
End Function 
1

Не понимая, почему вы хотите это сделать, немного сложно дать вам хорошее решение.

я представлю два варианта:

1) VB.NET - это не ясно, как вы настраиваете ваши атрибуты в вашем HTML. Вы должны быть в состоянии сделать что-то вроде (примечание: это из моей памяти VB.net и handcoded здесь, а не с помощью VS.NET):

HTML Вид:

<asp:HyperLink id="FirstLink" runat="server" /> 
... 

CodeBehind

FirstLink.NavigateUrl = yourUrlVariableHere 
... 
YourInputBox.Text = String.Concat(yourUrlVariableHere, yourOtherVariablesHere ...) 

2) JQuery -

по сути вы хотите, чтобы ваши атрибуты, а затем дис играть в них:

$(function(){ 
    var anchor1 = $("#firstAnchor").attr("href"); 
    var imageSrc = $("#my-image").attr("src"); 

    $("#my-display").html(anchor1+ "<br/>" + imageSrc); 
}); 

Полный образец here

Смежные вопросы