mohsen07 Ответов: 1

Как создать функцию выбора внутреннего текста HTML тега в SQL


Я хочу создать windows form Sql для получения исходного веб-сайта страницы и анализа содержимого. полное описание домашней страницы: проанализируйте этот источник.

<div id="naver">
          -    <ul id="naverlist">
          --        <li class="overbrand" class="navhome"><a href="http://www.laptop-power-adapters.co.nz">HOME</a></li>
               -   <li><a href="http://www.laptop-power-adapters.co.nz/acer-laptop-power-adapters.htm">Acer</a></li>
                  <li class="navspecial"><a href="http://www.laptop-power-adapters.co.nz/contact.htm" target="_blank">Contact Us</a></li>
              </ul>
            </div>


после разбора создайте BrandTBL и сохраните acer'url и ACR:

Brand       URL
Acer        http://www.laptop-power-adapters.co.nz/acer-laptop-power-adapters.htm
ASUS        http://www.laptop-power-adapters.co.nz/asus-laptop-power-adapters.htm


и получить исходный код acer'url и разобрать acer'url.

в исходный код страницы на Асер : создать таблицу по названию серии MOdelTBL и в таблице , сохранить c720 комплект и'url c720 комплект.

Спасибо.

Что я уже пробовал:

Я ищу в интернете, но моя проблема не решена.

Karthik_Mahalingam

не ясно, пожалуйста, предоставьте больше информации

mohsen07

Для домашней страницы, созданной брендом, вводятся название бренда и URL-адрес.
Для бренда (например, Acer adapter plate), бренда, Aspire... для создания на этой же странице должна быть создана таблица моделей C 120, а также название и адрес магазина.
Внутри страницы с-120 модель, описание и возможности хранятся в таблице или в текстовом файле.

Karthik_Mahalingam

приведите какой-нибудь пример

mohsen07

для u :
http://www.laptop-power-adapters.co.nz

Karthik_Mahalingam

в приведенном выше url-адресе какая информация вам нужна?

mohsen07

создание таблицы
3 колонка: idbrand, фирменное наименование, url-адрес бренда
в разделе ноутбуки Acer : столбец 3 , idbrand,idmodel,название модели , Модель URL-адрес
на странице aspirec720: 5 столбец: id series, idmodel, имя серии, urlseries, описание, совместимость.

Karthik_Mahalingam

динамическая таблица ?

mohsen07

Таблицы, связанные с идентификатором.хранимая процедура

mohsen07

????

Karthik_Mahalingam

Непонятный

mohsen07

Функция, которая может предоставить нужную информацию из проводника веб-страниц и залить в таблицу в соответствии с примером, который я дал URl-адресу сайта

Karthik_Mahalingam

вы должны использовать HTMLAgilitypack для извлечения данных с веб-страницы.

mohsen07

помогите мне использовать htmlagilitypack для этого примера?
спасибо.
пожалуйста только этот экзамен в моем вопросе:
<div id= "naver">
- <ul id= "naverlist">
-- <li class=" overbrand "class= "navhome">ДОМ< / li>
- <li>Компания Acer< / li>
< li class= "navspecial">связаться с нами< / li>
< / ul>
< / div>

Karthik_Mahalingam

хорошо в приведенном выше html, какая информация вам нужна

mohsen07

в примере:
<div id= "naver">
- <ul id= "naverlist">
-- <li class=" overbrand "class= "navhome">ДОМ< / li>
- <li>Компания Acer< / li>
< li>Компания Acer< / li>
< li class= "navspecial">связаться с нами< / li>
< / ul>
< / div>

acr и url'Acer(http://www.laptop-power-adapters.co.nz/acer-laptop-power-adapters.htm)
asus и url'ASUS
показать в datatable или отправить для таблицы в sql server или создать папку с именем acer и сохранить в файле txt url'brand name.
пожалуйста, заполните код с помощью
спасибо

url становится ссылкой, нажмите на acer или asus

mohsen07

ясно?

Karthik_Mahalingam

да, но пробовали ли вы что-нибудь?

mohsen07

хорошо?

Karthik_Mahalingam

обратитесь к этому и попробуйте
http://stackoverflow.com/a/37130809
если не повезет, тогда возвращайся.

mohsen07

проверил это, но не повезло.возможно создать с моим примером

Karthik_Mahalingam

для этой страницы
<div id= "naver">
- <ul id= "naverlist">
-- &ЛТ;литий класс="overbrand" класс="navhome"и GT;главная&ЛТ;/ли&ГТ;
- < li> Acer< / li>
< li> Acer< / li>
&ЛТ;литий класс="navspecial"и GT;свяжитесь с нами&ЛТ;/ли&ГТ;
< / ul>
< / div>

mohsen07

ДА
и для этой исходной страницы:(http://www.laptop-power-adapters.co.nz/acer-laptop-power-adapters.htm)

Karthik_Mahalingam

я буду ЧК

mohsen07

проверить это ? с htmlagility возможно?

Karthik_Mahalingam

в приведенном выше url-адресе много ссылок, доступных в том, который вы хотите

1 Ответов

Рейтинг:
1

NaibedyaKar

Вот код для UDF, который вы можете использовать

CREATE FUNCTION [dbo].[udf_StripHTML] (@HTMLText VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @Start INT
DECLARE @End INT
DECLARE @Length INT
SET @Start = CHARINDEX('<',@HTMLText) SET @End = 
CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText)) 
SET @Length = (@End - @Start) + 1 WHILE @Start > 0
AND @End > 0
AND @Length > 0
BEGIN
SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'')
SET @Start = CHARINDEX('<',@HTMLText) SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
SET @Length = (@End - @Start) + 1
END
RETURN LTRIM(RTRIM(@HTMLText))
END
GO


Следовать SQL SERVER-2005-UDF - User Defined Function to Strip HTML-Parse HTML-No Regular Expression - Journey to SQL Authority with Pinal Dave[^]


mohsen07

Можно ли объяснить коды?
Я использовал но ошибка:)
спасибо за ответ

NaibedyaKar

Какую ошибку вы получили? Вы получили ошибку при создании функции или выполнении функции?

Как только вы создадите UDF, то вызовите его, как показано ниже
Выберите dbo.[udf_StripHTML] ('<div id= "naver">
- <ul id= "naverlist">
-- <li class=" overbrand "class= "navhome">ДОМ< / li>
- <li>Компания Acer< / li>
< li class= "navspecial">связаться с нами< / li>
< / ul>
< / div>') Как OutputText

Код в основном проверяет наличие угловых скобок начала " & lt; "и конца">". После этого он удаляет текст внутри этого. Таким образом, удалив html-код и просто сохранив обычный текст.

mohsen07

спасибо за помощь. это нормально, но в выходном тексте в одной строке, но я хочу acer и url в двух столбцах. пожалуйста, помогите мне:
фирменное наименование--------------url
ацр----------------- http://.....htm

спасибо

mohsen07

очень Вам благодарен.
только ошибка в теге скрипта, потому что в контенте есть текст=... также я хочу удалить ненужный контент как домашний или связаться с нами, а также выйти на таблицу с двумя столбцами с фирменными наименованиями и Url-адресом, отображаемыми рядом с каждым именем в качестве примера моего вопроса.
Возможность того, что адреса обеих страниц отображаются в розетке?
спасибо за помощь.

mohsen07

Можно написать объяснение для каждой команды строки

mohsen07

Возможно ли, что исходный код импортируется sql?

NaibedyaKar

Что вы подразумеваете под исходным кодом, импортируемым SQL?

Можете ли вы сказать мне, какие строки или ключевые слова из приведенной выше функции вам нужны объяснения?

mohsen07

импорт .xml или. txt или прямая ссылка сайта. пожалуйста, ответьте на другой комментарий, спасибо

mohsen07

Набор @значение htmltext = вещи(@htmltext, то@Пуск@ "длина",")
Набор @пуск = функция charindex (в'<',@значение htmltext) набор @конец = функция charindex (в'>',@htmltext,то функция charindex (в'<',@значение htmltext))
SET @Length = (@End - @Start) + 1

mohsen07

только ошибка в теге скрипта, потому что в контенте есть текст=... также я хочу удалить ненужный контент как домашний или связаться с нами, а также выйти на таблицу с двумя столбцами с фирменными наименованиями и Url-адресом, отображаемыми рядом с каждым именем в качестве примера моего вопроса.
Возможность того, что адреса обеих страниц отображаются в розетке?
спасибо за помощь.

NaibedyaKar

ладно..
Функция STUFF вставляет строку в другую строку с любым заданным индексом char.
Так что если мы напишем

&ЛТ;заранее Ланг="в SQL"и GT;выберите материал('FirstString', 4, 1, 'SecondString'); &ЛТ;/пре&ГТ;
Выход будет FirSecondStringtString. Это происходит потому, что вторая строка вставляется в 4-ю позицию первой строки, а 1 символ удаляется рядом с первой строкой.

Fir + SecondString + tString (s удаляется из первой строки).
Следовать [^]

CHARINDEX ищет строку внутри другой строки, а затем предоставляет начальную позицию для найденной строки.
&ЛТ;заранее Ланг="в SQL"и GT;выберите функция charindex ('строка для поиска', 'исходная строка для поиска или теста', 0 )&ЛТ;/пре&ГТ;

Выход для этого будет 10. Это означает, что "строка для поиска" находится на 10-й позиции от "исходной строки для поиска или тестирования". 3-й parm-это необязательный параметр, который указывает, после какого количества символов мы должны начать поиск.

Проверьте подробнее CHARINDEX (Transact-SQL)[^]

mohsen07

на выходе вернуться в 1 ряд,то можно до n строк?

NaibedyaKar

Вы можете использовать это в своем запросе select

Выберите Id, dbo.[udf_StripHTML] (HTMLColum) из TableContainingHTMLData

mohsen07

мне нужен вывод с 3 колонками (id , фирменное наименование, url) и N строками. можно ли получить url-адрес с функцией???пожалуйста:d

mohsen07

Эро.
создать таблицу с торговой маркой с 3 столбца ID , наименование,адрес
назовите мою функцию fn_striphtml3
Выберите Id, dbo.[fn_StripHTML3] (outputText) от бренда

mohsen07

http://uploadpie.com/51fWt

я хочу, чтобы это изображение, 1 строка создана. я хочу до n строк . Aspire переключатель 10Е в 1 строку и Aspire переключатель 11 1 ряд. хорошо ? возможно?

NaibedyaKar

Я могу дать вам идею, как справиться с этим. Возможно, я не смогу предоставить вам точный Код UDF.
В настоящее время в соответствии с приведенной выше функцией мы проверяем начало и конец угловых скобок, после чего удаляем всю строку внутри нее. А затем объединить все эти строки и вернуться в виде varchar.

Вы можете изменить функцию, чтобы вернуть таблицу.
Создайте функцию [dbo].[udf_StripHTML1] (@HTMLText VARCHAR (MAX))
Возвращает таблицу @OutputTable
(
Бренд VARCHAR(255),
Имя нварчар(255)
)
.. . .. . .. . . . .
.. . .. . .. . . . .

И тогда вместо того, чтобы объединять строки, вам придется вставить их в таблицу. Таким образом, вы должны написать логику таким образом, чтобы вся строка могла быть разделена надлежащим образом.

mohsen07

не ясно:) пожалуйста, пример для функции. ошибка:
Создайте функцию [dbo].[fn_StripHTML6] (@HTMLText VARCHAR (MAX))
Возвращает таблицу @BrandTable
(
Бренд VARCHAR(255),
Имя нварчар(255)
)
АС
НАЧАТЬ

Объявить @Start INT
Объявить @End INT
Объявить @Length INT

SET @Start = CHARINDEX('<',@HTMLText)
Набор @конец = функция charindex (в'>',@htmltext,то функция charindex (в'<',@значение htmltext))
SET @Length = (@End - @Start) + 1
В то время как @Start > 0 и @End > 0 и @Length > 0
НАЧАТЬ
Набор @значение htmltext = вещи(@htmltext, то@Пуск@ "длина",")
SET @Start = CHARINDEX('<',@HTMLText)
Набор @конец = функция charindex (в'>',@htmltext,то функция charindex (в'<',@значение htmltext))
SET @Length = (@End - @Start) + 1
КОНЕЦ
--Вернуть функция ltrim(функция rtrim(@значение htmltext))
RETURN @HTMLText
КОНЕЦ

ошибка:
Msg 178, Уровень 15, состояние 1, процедура fn_StripHTML6, строка 24
Оператор RETURN с возвращаемым значением не может быть использован в этом контексте.

NaibedyaKar

проверьте эту ссылку, чтобы понять, как вернуть таблицу из UDF

http://www.codeproject.com/Articles/167399/Using-Table-Valued-Functions-in-SQL-Server

mohsen07

опять ошибка

NaibedyaKar

Отправьте код для новой функции. Какую ошибку вы получаете?

mohsen07

Оператор RETURN с возвращаемым значением не может быть использован в этом контексте.

NaibedyaKar

Я думаю, что вы не вставляете строки в @BrandTable.

mohsen07

я не знаю